parsing: add timezone to ident structures
This will allow us to mimic Git's behaviour of showing times in the originator's timezone when displaying commits and tags. Signed-off-by: John Keeping <john@keeping.me.uk>
This commit is contained in:
parent
57ea1aa2a5
commit
45c87ca1c3
3
cgit.h
3
cgit.h
@ -130,9 +130,11 @@ struct commitinfo {
|
|||||||
char *author;
|
char *author;
|
||||||
char *author_email;
|
char *author_email;
|
||||||
unsigned long author_date;
|
unsigned long author_date;
|
||||||
|
int author_tz;
|
||||||
char *committer;
|
char *committer;
|
||||||
char *committer_email;
|
char *committer_email;
|
||||||
unsigned long committer_date;
|
unsigned long committer_date;
|
||||||
|
int committer_tz;
|
||||||
char *subject;
|
char *subject;
|
||||||
char *msg;
|
char *msg;
|
||||||
char *msg_encoding;
|
char *msg_encoding;
|
||||||
@ -142,6 +144,7 @@ struct taginfo {
|
|||||||
char *tagger;
|
char *tagger;
|
||||||
char *tagger_email;
|
char *tagger_email;
|
||||||
unsigned long tagger_date;
|
unsigned long tagger_date;
|
||||||
|
int tagger_tz;
|
||||||
char *msg;
|
char *msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
10
parsing.c
10
parsing.c
@ -69,7 +69,7 @@ static char *substr(const char *head, const char *tail)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_user(const char *t, char **name, char **email, unsigned long *date)
|
static void parse_user(const char *t, char **name, char **email, unsigned long *date, int *tz)
|
||||||
{
|
{
|
||||||
struct ident_split ident;
|
struct ident_split ident;
|
||||||
unsigned email_len;
|
unsigned email_len;
|
||||||
@ -83,6 +83,8 @@ static void parse_user(const char *t, char **name, char **email, unsigned long *
|
|||||||
|
|
||||||
if (ident.date_begin)
|
if (ident.date_begin)
|
||||||
*date = strtoul(ident.date_begin, NULL, 10);
|
*date = strtoul(ident.date_begin, NULL, 10);
|
||||||
|
if (ident.tz_begin)
|
||||||
|
*tz = atoi(ident.tz_begin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,13 +149,13 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
|||||||
|
|
||||||
if (p && skip_prefix(p, "author ", &p)) {
|
if (p && skip_prefix(p, "author ", &p)) {
|
||||||
parse_user(p, &ret->author, &ret->author_email,
|
parse_user(p, &ret->author, &ret->author_email,
|
||||||
&ret->author_date);
|
&ret->author_date, &ret->author_tz);
|
||||||
p = next_header_line(p);
|
p = next_header_line(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p && skip_prefix(p, "committer ", &p)) {
|
if (p && skip_prefix(p, "committer ", &p)) {
|
||||||
parse_user(p, &ret->committer, &ret->committer_email,
|
parse_user(p, &ret->committer, &ret->committer_email,
|
||||||
&ret->committer_date);
|
&ret->committer_date, &ret->committer_tz);
|
||||||
p = next_header_line(p);
|
p = next_header_line(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +210,7 @@ struct taginfo *cgit_parse_tag(struct tag *tag)
|
|||||||
for (p = data; !end_of_header(p); p = next_header_line(p)) {
|
for (p = data; !end_of_header(p); p = next_header_line(p)) {
|
||||||
if (skip_prefix(p, "tagger ", &p)) {
|
if (skip_prefix(p, "tagger ", &p)) {
|
||||||
parse_user(p, &ret->tagger, &ret->tagger_email,
|
parse_user(p, &ret->tagger, &ret->tagger_email,
|
||||||
&ret->tagger_date);
|
&ret->tagger_date, &ret->tagger_tz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user