summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2006-12-16 13:25:41 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2006-12-16 13:25:41 (UTC)
commit77078ba716ccdfdc954741355dd6a17632db961b (patch) (unidiff)
treeef66d7a2690c90981ab0f446a19111a04d121c7a
parent7c849d94ec1cfecdec5a88d49f5af5c98f96ebca (diff)
downloadcgit-77078ba716ccdfdc954741355dd6a17632db961b.zip
cgit-77078ba716ccdfdc954741355dd6a17632db961b.tar.gz
cgit-77078ba716ccdfdc954741355dd6a17632db961b.tar.bz2
Teach commit parser about author/committer email + timestamp
We want all four of these when showing a commit, so save them in the commitinfo struct. Btw: There's probably no good reason to save committer timestamp since it's already available in commit->date. But it doesn't hurt us either, and it makes the parser look more complete, so we just do it. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h4
-rw-r--r--parsing.c12
2 files changed, 14 insertions, 2 deletions
diff --git a/cgit.h b/cgit.h
index b6b60c6..f06a941 100644
--- a/cgit.h
+++ b/cgit.h
@@ -1,45 +1,49 @@
1#ifndef CGIT_H 1#ifndef CGIT_H
2#define CGIT_H 2#define CGIT_H
3 3
4#include "git.h" 4#include "git.h"
5#include <openssl/sha.h> 5#include <openssl/sha.h>
6#include <ctype.h> 6#include <ctype.h>
7#include <sched.h> 7#include <sched.h>
8 8
9typedef void (*configfn)(const char *name, const char *value); 9typedef void (*configfn)(const char *name, const char *value);
10 10
11struct cacheitem { 11struct cacheitem {
12 char *name; 12 char *name;
13 struct stat st; 13 struct stat st;
14 int ttl; 14 int ttl;
15 int fd; 15 int fd;
16}; 16};
17 17
18struct commitinfo { 18struct commitinfo {
19 struct commit *commit; 19 struct commit *commit;
20 char *author; 20 char *author;
21 char *author_email;
22 unsigned long author_date;
21 char *committer; 23 char *committer;
24 char *committer_email;
25 unsigned long committer_date;
22 char *subject; 26 char *subject;
23 char *msg; 27 char *msg;
24}; 28};
25 29
26extern const char cgit_version[]; 30extern const char cgit_version[];
27 31
28extern char *cgit_root; 32extern char *cgit_root;
29extern char *cgit_root_title; 33extern char *cgit_root_title;
30extern char *cgit_css; 34extern char *cgit_css;
31extern char *cgit_logo; 35extern char *cgit_logo;
32extern char *cgit_logo_link; 36extern char *cgit_logo_link;
33extern char *cgit_virtual_root; 37extern char *cgit_virtual_root;
34extern char *cgit_cache_root; 38extern char *cgit_cache_root;
35 39
36extern int cgit_nocache; 40extern int cgit_nocache;
37extern int cgit_max_lock_attempts; 41extern int cgit_max_lock_attempts;
38extern int cgit_cache_root_ttl; 42extern int cgit_cache_root_ttl;
39extern int cgit_cache_repo_ttl; 43extern int cgit_cache_repo_ttl;
40extern int cgit_cache_dynamic_ttl; 44extern int cgit_cache_dynamic_ttl;
41extern int cgit_cache_static_ttl; 45extern int cgit_cache_static_ttl;
42extern int cgit_cache_max_create_time; 46extern int cgit_cache_max_create_time;
43 47
44extern char *cgit_repo_name; 48extern char *cgit_repo_name;
45extern char *cgit_repo_desc; 49extern char *cgit_repo_desc;
diff --git a/parsing.c b/parsing.c
index be471b5..4d5cc74 100644
--- a/parsing.c
+++ b/parsing.c
@@ -114,47 +114,55 @@ char *substr(const char *head, const char *tail)
114 buf[tail - head] = '\0'; 114 buf[tail - head] = '\0';
115 return buf; 115 return buf;
116} 116}
117 117
118struct commitinfo *cgit_parse_commit(struct commit *commit) 118struct commitinfo *cgit_parse_commit(struct commit *commit)
119{ 119{
120 struct commitinfo *ret; 120 struct commitinfo *ret;
121 char *p = commit->buffer, *t = commit->buffer; 121 char *p = commit->buffer, *t = commit->buffer;
122 122
123 ret = xmalloc(sizeof(*ret)); 123 ret = xmalloc(sizeof(*ret));
124 ret->commit = commit; 124 ret->commit = commit;
125 125
126 if (strncmp(p, "tree ", 5)) 126 if (strncmp(p, "tree ", 5))
127 die("Bad commit: %s", sha1_to_hex(commit->object.sha1)); 127 die("Bad commit: %s", sha1_to_hex(commit->object.sha1));
128 else 128 else
129 p += 46; // "tree " + hex[40] + "\n" 129 p += 46; // "tree " + hex[40] + "\n"
130 130
131 while (!strncmp(p, "parent ", 7)) 131 while (!strncmp(p, "parent ", 7))
132 p += 48; // "parent " + hex[40] + "\n" 132 p += 48; // "parent " + hex[40] + "\n"
133 133
134 if (!strncmp(p, "author ", 7)) { 134 if (!strncmp(p, "author ", 7)) {
135 p += 7; 135 p += 7;
136 t = strchr(p, '<') - 1; 136 t = strchr(p, '<') - 1;
137 ret->author = substr(p, t); 137 ret->author = substr(p, t);
138 p = strchr(p, '\n') + 1; 138 p = t;
139 t = strchr(t, '>') + 1;
140 ret->author_email = substr(p, t);
141 ret->author_date = atol(++t);
142 p = strchr(t, '\n') + 1;
139 } 143 }
140 144
141 if (!strncmp(p, "committer ", 9)) { 145 if (!strncmp(p, "committer ", 9)) {
142 p += 9; 146 p += 9;
143 t = strchr(p, '<') - 1; 147 t = strchr(p, '<') - 1;
144 ret->committer = substr(p, t); 148 ret->committer = substr(p, t);
145 p = strchr(p, '\n') + 1; 149 p = t;
150 t = strchr(t, '>') + 1;
151 ret->committer_email = substr(p, t);
152 ret->committer_date = atol(++t);
153 p = strchr(t, '\n') + 1;
146 } 154 }
147 155
148 while (*p == '\n') 156 while (*p == '\n')
149 p = strchr(p, '\n') + 1; 157 p = strchr(p, '\n') + 1;
150 158
151 t = strchr(p, '\n'); 159 t = strchr(p, '\n');
152 ret->subject = substr(p, t); 160 ret->subject = substr(p, t);
153 p = t + 1; 161 p = t + 1;
154 162
155 while (*p == '\n') 163 while (*p == '\n')
156 p = strchr(p, '\n') + 1; 164 p = strchr(p, '\n') + 1;
157 ret->msg = p; 165 ret->msg = p;
158 166
159 return ret; 167 return ret;
160} 168}