-rw-r--r-- | cgit.h | 4 | ||||
-rw-r--r-- | parsing.c | 12 |
2 files changed, 14 insertions, 2 deletions
@@ -5,33 +5,37 @@ #include <openssl/sha.h> #include <ctype.h> #include <sched.h> typedef void (*configfn)(const char *name, const char *value); struct cacheitem { char *name; struct stat st; int ttl; int fd; }; struct commitinfo { struct commit *commit; char *author; + char *author_email; + unsigned long author_date; char *committer; + char *committer_email; + unsigned long committer_date; char *subject; char *msg; }; extern const char cgit_version[]; extern char *cgit_root; extern char *cgit_root_title; extern char *cgit_css; extern char *cgit_logo; extern char *cgit_logo_link; extern char *cgit_virtual_root; extern char *cgit_cache_root; extern int cgit_nocache; extern int cgit_max_lock_attempts; @@ -122,39 +122,47 @@ struct commitinfo *cgit_parse_commit(struct commit *commit) ret = xmalloc(sizeof(*ret)); ret->commit = commit; if (strncmp(p, "tree ", 5)) die("Bad commit: %s", sha1_to_hex(commit->object.sha1)); else p += 46; // "tree " + hex[40] + "\n" while (!strncmp(p, "parent ", 7)) p += 48; // "parent " + hex[40] + "\n" if (!strncmp(p, "author ", 7)) { p += 7; t = strchr(p, '<') - 1; ret->author = substr(p, t); - p = strchr(p, '\n') + 1; + p = t; + t = strchr(t, '>') + 1; + ret->author_email = substr(p, t); + ret->author_date = atol(++t); + p = strchr(t, '\n') + 1; } if (!strncmp(p, "committer ", 9)) { p += 9; t = strchr(p, '<') - 1; ret->committer = substr(p, t); - p = strchr(p, '\n') + 1; + p = t; + t = strchr(t, '>') + 1; + ret->committer_email = substr(p, t); + ret->committer_date = atol(++t); + p = strchr(t, '\n') + 1; } while (*p == '\n') p = strchr(p, '\n') + 1; t = strchr(p, '\n'); ret->subject = substr(p, t); p = t + 1; while (*p == '\n') p = strchr(p, '\n') + 1; ret->msg = p; return ret; } |