X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=commit.c;h=254c902716e08266a89a9df245bcda5808737b6a;hb=f79b65aa65b7697a1cae0f895061ce822f410c5d;hp=738590f31a397da0e398db3d350d29aff797965c;hpb=6c88be169881c9223532796bd225e79afaa115e1;p=git.git diff --git a/commit.c b/commit.c index 738590f3..254c9027 100644 --- a/commit.c +++ b/commit.c @@ -5,6 +5,21 @@ const char *commit_type = "commit"; +enum cmit_fmt get_commit_format(const char *arg) +{ + if (!*arg) + return CMIT_FMT_DEFAULT; + if (!strcmp(arg, "=raw")) + return CMIT_FMT_RAW; + if (!strcmp(arg, "=medium")) + return CMIT_FMT_MEDIUM; + if (!strcmp(arg, "=short")) + return CMIT_FMT_SHORT; + if (!strcmp(arg, "=full")) + return CMIT_FMT_FULL; + die("invalid --pretty format"); +} + static struct commit *check_commit(struct object *obj, const unsigned char *sha1) { if (obj->type != commit_type) { @@ -132,7 +147,7 @@ void free_commit_list(struct commit_list *list) } } -void insert_by_date(struct commit_list **list, struct commit *item) +struct commit_list * insert_by_date(struct commit *item, struct commit_list **list) { struct commit_list **pp = list; struct commit_list *p; @@ -142,7 +157,7 @@ void insert_by_date(struct commit_list **list, struct commit *item) } pp = &p->next; } - commit_list_insert(item, pp); + return commit_list_insert(item, pp); } @@ -150,7 +165,7 @@ void sort_by_date(struct commit_list **list) { struct commit_list *ret = NULL; while (*list) { - insert_by_date(&ret, (*list)->item); + insert_by_date((*list)->item, &ret); *list = (*list)->next; } *list = ret; @@ -171,7 +186,7 @@ struct commit *pop_most_recent_commit(struct commit_list **list, parse_commit(commit); if (!(commit->object.flags & mark)) { commit->object.flags |= mark; - insert_by_date(list, commit); + insert_by_date(commit, list); } parents = parents->next; } @@ -196,14 +211,13 @@ static int get_one_line(const char *msg, unsigned long len) return ret; } -static int add_author_info(enum cmit_fmt fmt, char *buf, const char *line, int len) +static int add_user_info(const char *what, enum cmit_fmt fmt, char *buf, const char *line) { char *date; unsigned int namelen; unsigned long time; int tz, ret; - line += strlen("author "); date = strchr(line, '>'); if (!date) return 0; @@ -211,7 +225,7 @@ static int add_author_info(enum cmit_fmt fmt, char *buf, const char *line, int l time = strtoul(date, &date, 10); tz = strtol(date, NULL, 10); - ret = sprintf(buf, "Author: %.*s\n", namelen, line); + ret = sprintf(buf, "%s: %.*s\n", what, namelen, line); if (fmt == CMIT_FMT_MEDIUM) ret += sprintf(buf + ret, "Date: %s\n", show_date(time, tz)); return ret; @@ -284,7 +298,11 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt, const char *msg, unsigned l offset += add_parent_info(fmt, buf + offset, line, ++parents); } if (!memcmp(line, "author ", 7)) - offset += add_author_info(fmt, buf + offset, line, linelen); + offset += add_user_info("Author", fmt, buf + offset, line + 7); + if (fmt == CMIT_FMT_FULL) { + if (!memcmp(line, "committer ", 10)) + offset += add_user_info("Commit", fmt, buf + offset, line + 10); + } continue; }