mirror of
https://git.zx2c4.com/cgit
synced 2024-11-22 16:38:42 +00:00
Add function cgit_parse_tag()
Teach cgit how to extract author info from a tag. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
parent
06c81d6faa
commit
a69061fdb7
8
cgit.h
8
cgit.h
@ -27,6 +27,13 @@ struct commitinfo {
|
|||||||
char *msg;
|
char *msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct taginfo {
|
||||||
|
char *tagger;
|
||||||
|
char *tagger_email;
|
||||||
|
int tagger_date;
|
||||||
|
char *msg;
|
||||||
|
};
|
||||||
|
|
||||||
extern const char cgit_version[];
|
extern const char cgit_version[];
|
||||||
|
|
||||||
extern char *cgit_root;
|
extern char *cgit_root;
|
||||||
@ -87,6 +94,7 @@ extern void html_filemode(unsigned short mode);
|
|||||||
extern int cgit_read_config(const char *filename, configfn fn);
|
extern int cgit_read_config(const char *filename, configfn fn);
|
||||||
extern int cgit_parse_query(char *txt, configfn fn);
|
extern int cgit_parse_query(char *txt, configfn fn);
|
||||||
extern struct commitinfo *cgit_parse_commit(struct commit *commit);
|
extern struct commitinfo *cgit_parse_commit(struct commit *commit);
|
||||||
|
extern struct taginfo *cgit_parse_tag(struct tag *tag);
|
||||||
|
|
||||||
extern char *cache_safe_filename(const char *unsafe);
|
extern char *cache_safe_filename(const char *unsafe);
|
||||||
extern int cache_lock(struct cacheitem *item);
|
extern int cache_lock(struct cacheitem *item);
|
||||||
|
47
parsing.c
47
parsing.c
@ -196,3 +196,50 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct taginfo *cgit_parse_tag(struct tag *tag)
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
char type[20];
|
||||||
|
unsigned long size;
|
||||||
|
char *p, *t;
|
||||||
|
struct taginfo *ret;
|
||||||
|
|
||||||
|
data = read_sha1_file(tag->object.sha1, type, &size);
|
||||||
|
if (!data || strcmp(type, tag_type)) {
|
||||||
|
free(data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = xmalloc(sizeof(*ret));
|
||||||
|
ret->tagger = NULL;
|
||||||
|
ret->tagger_email = NULL;
|
||||||
|
ret->tagger_date = 0;
|
||||||
|
ret->msg = NULL;
|
||||||
|
|
||||||
|
p = data;
|
||||||
|
|
||||||
|
while (p) {
|
||||||
|
if (*p == '\n')
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!strncmp(p, "tagger ", 7)) {
|
||||||
|
p += 7;
|
||||||
|
t = strchr(p, '<') - 1;
|
||||||
|
ret->tagger = substr(p, t);
|
||||||
|
p = t;
|
||||||
|
t = strchr(t, '>') + 1;
|
||||||
|
ret->tagger_email = substr(p, t);
|
||||||
|
ret->tagger_date = atol(++t);
|
||||||
|
}
|
||||||
|
p = strchr(p, '\n') + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (p && (*p == '\n'))
|
||||||
|
p = strchr(p, '\n') + 1;
|
||||||
|
if (p)
|
||||||
|
ret->msg = xstrdup(p);
|
||||||
|
free(data);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user