From: Linus Torvalds Date: Mon, 27 Jun 2005 00:50:46 +0000 (-0700) Subject: Add "--pretty=full" format that also shows committer. X-Git-Tag: v0.99~163 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=9b66ec04741b4030e7654dcb7b978a29a8214b31;p=git.git Add "--pretty=full" format that also shows committer. Also move the common implementation of parsing the --pretty argument format into commit.c rather than having duplicates in diff-tree.c and rev-list.c. --- diff --git a/commit.c b/commit.c index 738590f3..03f8ca87 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) { @@ -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; } diff --git a/commit.h b/commit.h index 57c1b62f..13392312 100644 --- a/commit.h +++ b/commit.h @@ -37,9 +37,11 @@ enum cmit_fmt { CMIT_FMT_RAW, CMIT_FMT_MEDIUM, CMIT_FMT_DEFAULT = CMIT_FMT_MEDIUM, - CMIT_FMT_SHORT + CMIT_FMT_SHORT, + CMIT_FMT_FULL, }; +extern enum cmit_fmt get_commit_format(const char *arg); extern unsigned long pretty_print_commit(enum cmit_fmt fmt, const char *msg, unsigned long len, char *buf, unsigned long space); void insert_by_date(struct commit_list **list, struct commit *item); diff --git a/diff-tree.c b/diff-tree.c index d467e6cf..60ad2b5b 100644 --- a/diff-tree.c +++ b/diff-tree.c @@ -397,19 +397,6 @@ static int diff_tree_stdin(char *line) static char *diff_tree_usage = "git-diff-tree [-p] [-r] [-z] [--stdin] [-m] [-s] [-v] [--pretty] [-t] [-R] [-B] [-M] [-C] [--find-copies-header] [-O] [-S] [--pickaxe-all] "; -static 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; - usage(diff_tree_usage); -} - int main(int argc, const char **argv) { int nr_sha1; diff --git a/rev-list.c b/rev-list.c index 6a383f85..bf61b74d 100644 --- a/rev-list.c +++ b/rev-list.c @@ -307,20 +307,6 @@ struct commit_list *limit_list(struct commit_list *list) return newlist; } -static 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; - usage(rev_list_usage); -} - - int main(int argc, char **argv) { struct commit_list *list = NULL;