author | Lars Hjemli <hjemli@gmail.com> | 2007-01-17 00:09:51 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-01-17 00:09:51 (UTC) |
commit | a69061fdb7380d73715aeb3a0da6e91a24df90e4 (patch) (unidiff) | |
tree | bb514d5bfbab6e3b2904b2633a33175802f084d2 | |
parent | 06c81d6faafff1c80bc9e2302e5b8fea393b775b (diff) | |
download | cgit-a69061fdb7380d73715aeb3a0da6e91a24df90e4.zip cgit-a69061fdb7380d73715aeb3a0da6e91a24df90e4.tar.gz cgit-a69061fdb7380d73715aeb3a0da6e91a24df90e4.tar.bz2 |
Add function cgit_parse_tag()
Teach cgit how to extract author info from a tag.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 8 | ||||
-rw-r--r-- | parsing.c | 47 |
2 files changed, 55 insertions, 0 deletions
@@ -22,16 +22,23 @@ struct commitinfo { | |||
22 | unsigned long author_date; | 22 | unsigned long author_date; |
23 | char *committer; | 23 | char *committer; |
24 | char *committer_email; | 24 | char *committer_email; |
25 | unsigned long committer_date; | 25 | unsigned long committer_date; |
26 | char *subject; | 26 | char *subject; |
27 | char *msg; | 27 | char *msg; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | struct taginfo { | ||
31 | char *tagger; | ||
32 | char *tagger_email; | ||
33 | int tagger_date; | ||
34 | char *msg; | ||
35 | }; | ||
36 | |||
30 | extern const char cgit_version[]; | 37 | extern const char cgit_version[]; |
31 | 38 | ||
32 | extern char *cgit_root; | 39 | extern char *cgit_root; |
33 | extern char *cgit_root_title; | 40 | extern char *cgit_root_title; |
34 | extern char *cgit_css; | 41 | extern char *cgit_css; |
35 | extern char *cgit_logo; | 42 | extern char *cgit_logo; |
36 | extern char *cgit_logo_link; | 43 | extern char *cgit_logo_link; |
37 | extern char *cgit_virtual_root; | 44 | extern char *cgit_virtual_root; |
@@ -82,16 +89,17 @@ extern void html_attr(char *txt); | |||
82 | extern void html_hidden(char *name, char *value); | 89 | extern void html_hidden(char *name, char *value); |
83 | extern void html_link_open(char *url, char *title, char *class); | 90 | extern void html_link_open(char *url, char *title, char *class); |
84 | extern void html_link_close(void); | 91 | extern void html_link_close(void); |
85 | extern void html_filemode(unsigned short mode); | 92 | extern void html_filemode(unsigned short mode); |
86 | 93 | ||
87 | extern int cgit_read_config(const char *filename, configfn fn); | 94 | extern int cgit_read_config(const char *filename, configfn fn); |
88 | extern int cgit_parse_query(char *txt, configfn fn); | 95 | extern int cgit_parse_query(char *txt, configfn fn); |
89 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); | 96 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); |
97 | extern struct taginfo *cgit_parse_tag(struct tag *tag); | ||
90 | 98 | ||
91 | extern char *cache_safe_filename(const char *unsafe); | 99 | extern char *cache_safe_filename(const char *unsafe); |
92 | extern int cache_lock(struct cacheitem *item); | 100 | extern int cache_lock(struct cacheitem *item); |
93 | extern int cache_unlock(struct cacheitem *item); | 101 | extern int cache_unlock(struct cacheitem *item); |
94 | extern int cache_cancel_lock(struct cacheitem *item); | 102 | extern int cache_cancel_lock(struct cacheitem *item); |
95 | extern int cache_exist(struct cacheitem *item); | 103 | extern int cache_exist(struct cacheitem *item); |
96 | extern int cache_expired(struct cacheitem *item); | 104 | extern int cache_expired(struct cacheitem *item); |
97 | 105 | ||
@@ -191,8 +191,55 @@ struct commitinfo *cgit_parse_commit(struct commit *commit) | |||
191 | p = t + 1; | 191 | p = t + 1; |
192 | 192 | ||
193 | while (*p == '\n') | 193 | while (*p == '\n') |
194 | p = strchr(p, '\n') + 1; | 194 | p = strchr(p, '\n') + 1; |
195 | ret->msg = p; | 195 | ret->msg = p; |
196 | } | 196 | } |
197 | return ret; | 197 | return ret; |
198 | } | 198 | } |
199 | |||
200 | |||
201 | struct taginfo *cgit_parse_tag(struct tag *tag) | ||
202 | { | ||
203 | void *data; | ||
204 | char type[20]; | ||
205 | unsigned long size; | ||
206 | char *p, *t; | ||
207 | struct taginfo *ret; | ||
208 | |||
209 | data = read_sha1_file(tag->object.sha1, type, &size); | ||
210 | if (!data || strcmp(type, tag_type)) { | ||
211 | free(data); | ||
212 | return 0; | ||
213 | } | ||
214 | |||
215 | ret = xmalloc(sizeof(*ret)); | ||
216 | ret->tagger = NULL; | ||
217 | ret->tagger_email = NULL; | ||
218 | ret->tagger_date = 0; | ||
219 | ret->msg = NULL; | ||
220 | |||
221 | p = data; | ||
222 | |||
223 | while (p) { | ||
224 | if (*p == '\n') | ||
225 | break; | ||
226 | |||
227 | if (!strncmp(p, "tagger ", 7)) { | ||
228 | p += 7; | ||
229 | t = strchr(p, '<') - 1; | ||
230 | ret->tagger = substr(p, t); | ||
231 | p = t; | ||
232 | t = strchr(t, '>') + 1; | ||
233 | ret->tagger_email = substr(p, t); | ||
234 | ret->tagger_date = atol(++t); | ||
235 | } | ||
236 | p = strchr(p, '\n') + 1; | ||
237 | } | ||
238 | |||
239 | while (p && (*p == '\n')) | ||
240 | p = strchr(p, '\n') + 1; | ||
241 | if (p) | ||
242 | ret->msg = xstrdup(p); | ||
243 | free(data); | ||
244 | return ret; | ||
245 | } | ||