summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--parsing.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/parsing.c b/parsing.c
index 0412a9c..16b4db7 100644
--- a/parsing.c
+++ b/parsing.c
@@ -205,64 +205,72 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
205 return ret; 205 return ret;
206 206
207 if (strncmp(p, "tree ", 5)) 207 if (strncmp(p, "tree ", 5))
208 die("Bad commit: %s", sha1_to_hex(commit->object.sha1)); 208 die("Bad commit: %s", sha1_to_hex(commit->object.sha1));
209 else 209 else
210 p += 46; // "tree " + hex[40] + "\n" 210 p += 46; // "tree " + hex[40] + "\n"
211 211
212 while (!strncmp(p, "parent ", 7)) 212 while (!strncmp(p, "parent ", 7))
213 p += 48; // "parent " + hex[40] + "\n" 213 p += 48; // "parent " + hex[40] + "\n"
214 214
215 if (!strncmp(p, "author ", 7)) { 215 if (!strncmp(p, "author ", 7)) {
216 p += 7; 216 p += 7;
217 t = strchr(p, '<') - 1; 217 t = strchr(p, '<') - 1;
218 ret->author = substr(p, t); 218 ret->author = substr(p, t);
219 p = t; 219 p = t;
220 t = strchr(t, '>') + 1; 220 t = strchr(t, '>') + 1;
221 ret->author_email = substr(p, t); 221 ret->author_email = substr(p, t);
222 ret->author_date = atol(++t); 222 ret->author_date = atol(++t);
223 p = strchr(t, '\n') + 1; 223 p = strchr(t, '\n') + 1;
224 } 224 }
225 225
226 if (!strncmp(p, "committer ", 9)) { 226 if (!strncmp(p, "committer ", 9)) {
227 p += 9; 227 p += 9;
228 t = strchr(p, '<') - 1; 228 t = strchr(p, '<') - 1;
229 ret->committer = substr(p, t); 229 ret->committer = substr(p, t);
230 p = t; 230 p = t;
231 t = strchr(t, '>') + 1; 231 t = strchr(t, '>') + 1;
232 ret->committer_email = substr(p, t); 232 ret->committer_email = substr(p, t);
233 ret->committer_date = atol(++t); 233 ret->committer_date = atol(++t);
234 p = strchr(t, '\n') + 1; 234 p = strchr(t, '\n') + 1;
235 } 235 }
236 236
237 if (!strncmp(p, "encoding ", 9)) {
238 p += 9;
239 t = strchr(p, '\n') + 1;
240 ret->msg_encoding = substr(p, t);
241 p = t;
242 } else
243 ret->msg_encoding = xstrdup(PAGE_ENCODING);
244
237 while (*p && (*p != '\n')) 245 while (*p && (*p != '\n'))
238 p = strchr(p, '\n') + 1; // skip unknown header fields 246 p = strchr(p, '\n') + 1; // skip unknown header fields
239 247
240 while (*p == '\n') 248 while (*p == '\n')
241 p = strchr(p, '\n') + 1; 249 p = strchr(p, '\n') + 1;
242 250
243 t = strchr(p, '\n'); 251 t = strchr(p, '\n');
244 if (t) { 252 if (t) {
245 if (*t == '\0') 253 if (*t == '\0')
246 ret->subject = "** empty **"; 254 ret->subject = "** empty **";
247 else 255 else
248 ret->subject = substr(p, t); 256 ret->subject = substr(p, t);
249 p = t + 1; 257 p = t + 1;
250 258
251 while (*p == '\n') 259 while (*p == '\n')
252 p = strchr(p, '\n') + 1; 260 p = strchr(p, '\n') + 1;
253 ret->msg = xstrdup(p); 261 ret->msg = xstrdup(p);
254 } else 262 } else
255 ret->subject = substr(p, p+strlen(p)); 263 ret->subject = substr(p, p+strlen(p));
256 264
257 return ret; 265 return ret;
258} 266}
259 267
260 268
261struct taginfo *cgit_parse_tag(struct tag *tag) 269struct taginfo *cgit_parse_tag(struct tag *tag)
262{ 270{
263 void *data; 271 void *data;
264 enum object_type type; 272 enum object_type type;
265 unsigned long size; 273 unsigned long size;
266 char *p, *t; 274 char *p, *t;
267 struct taginfo *ret; 275 struct taginfo *ret;
268 276