diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-12-12 17:07:03 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-12 17:07:03 -0800 |
commit | cd1bea918bde5b32cf29159acac067bd238825b3 (patch) | |
tree | cd7175e8dfd4c84fd581313e5ef27fe9dbae3f90 | |
parent | 3e5f260144514f305a529bb2fe2efa7138a6b10a (diff) | |
parent | 3384a2dfc12f0fecd25ecfd6bfa9ee0d82517bf2 (diff) | |
download | git-cd1bea918bde5b32cf29159acac067bd238825b3.tar.gz |
Merge branch 'jc/shortlog-e'
* jc/shortlog-e:
shortlog: default to HEAD when the standard input is a tty
Invert numbers and names in the git-shortlog summary mode.
shortlog: document -e option
git-shortlog -e: show e-mail address as well
-rw-r--r-- | Documentation/git-shortlog.txt | 7 | ||||
-rw-r--r-- | builtin-diff.c | 14 | ||||
-rw-r--r-- | builtin-log.c | 5 | ||||
-rw-r--r-- | builtin-shortlog.c | 19 | ||||
-rw-r--r-- | revision.c | 12 | ||||
-rw-r--r-- | revision.h | 2 |
6 files changed, 37 insertions, 22 deletions
diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.txt index 2220ef6ea8..e14720b73f 100644 --- a/Documentation/git-shortlog.txt +++ b/Documentation/git-shortlog.txt @@ -8,8 +8,8 @@ git-shortlog - Summarize 'git log' output SYNOPSIS -------- [verse] -git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s] -git-shortlog [-n|--numbered] [-s|--summary] [<committish>...] +git-log --pretty=short | 'git-shortlog' [-h] [-n] [-s] [-e] +git-shortlog [-n|--numbered] [-s|--summary] [-e|--email] [<committish>...] DESCRIPTION ----------- @@ -32,6 +32,9 @@ OPTIONS -s, \--summary:: Suppress commit description and provide a commit count summary only. +-e, \--email:: + Show the email address of each author. + FILES ----- diff --git a/builtin-diff.c b/builtin-diff.c index 1b615991e1..55fb84c730 100644 --- a/builtin-diff.c +++ b/builtin-diff.c @@ -176,18 +176,6 @@ static int builtin_diff_combined(struct rev_info *revs, return 0; } -void add_head(struct rev_info *revs) -{ - unsigned char sha1[20]; - struct object *obj; - if (get_sha1("HEAD", sha1)) - return; - obj = parse_object(sha1); - if (!obj) - return; - add_pending_object(revs, obj, "HEAD"); -} - static void refresh_index_quietly(void) { struct lock_file *lock_file; @@ -272,7 +260,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) if (!strcmp(arg, "--")) break; else if (!strcmp(arg, "--cached")) { - add_head(&rev); + add_head_to_pending(&rev); if (!rev.pending.nr) die("No HEAD commit to compare with (yet)"); break; diff --git a/builtin-log.c b/builtin-log.c index b6a11220e2..cc3cc9069a 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -18,9 +18,6 @@ static int default_show_root = 1; static const char *fmt_patch_subject_prefix = "PATCH"; -/* this is in builtin-diff.c */ -void add_head(struct rev_info *revs); - static void add_name_decoration(const char *prefix, const char *name, struct object *obj) { int plen = strlen(prefix); @@ -746,7 +743,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) * does not have. */ rev.pending.objects[0].item->flags |= UNINTERESTING; - add_head(&rev); + add_head_to_pending(&rev); } /* * Otherwise, it is "format-patch -22 HEAD", and/or diff --git a/builtin-shortlog.c b/builtin-shortlog.c index b9cc134443..3d8d7094ab 100644 --- a/builtin-shortlog.c +++ b/builtin-shortlog.c @@ -11,6 +11,7 @@ static const char shortlog_usage[] = "git-shortlog [-n] [-s] [<commit-id>... ]"; static char *common_repo_prefix; +static int email; static int compare_by_number(const void *a1, const void *a2) { @@ -57,6 +58,14 @@ static void insert_one_record(struct path_list *list, len--; namebuf[len] = '\0'; } + else + len = strlen(namebuf); + + if (email) { + size_t room = sizeof(namebuf) - len - 1; + int maillen = eoemail - boemail + 1; + snprintf(namebuf + len, room, " %.*s", maillen, boemail); + } buffer = xstrdup(namebuf); item = path_list_insert(buffer, list); @@ -219,6 +228,9 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) else if (!strcmp(argv[1], "-s") || !strcmp(argv[1], "--summary")) summary = 1; + else if (!strcmp(argv[1], "-e") || + !strcmp(argv[1], "--email")) + email = 1; else if (!prefixcmp(argv[1], "-w")) { wrap_lines = 1; parse_wrap_args(argv[1], &in1, &in2, &wrap); @@ -237,9 +249,10 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) read_mailmap(&mailmap, ".mailmap", &common_repo_prefix); + /* assume HEAD if from a tty */ + if (!rev.pending.nr && isatty(0)) + add_head_to_pending(&rev); if (rev.pending.nr == 0) { - if (isatty(0)) - fprintf(stderr, "(reading log to summarize from standard input)\n"); read_from_stdin(&list); } else @@ -253,7 +266,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) struct path_list *onelines = list.items[i].util; if (summary) { - printf("%s: %d\n", list.items[i].path, onelines->nr); + printf("%6d\t%s\n", onelines->nr, list.items[i].path); } else { printf("%s (%d):\n", list.items[i].path, onelines->nr); for (j = onelines->nr - 1; j >= 0; j--) { diff --git a/revision.c b/revision.c index 2a59035192..7e2f4f1eb5 100644 --- a/revision.c +++ b/revision.c @@ -139,6 +139,18 @@ void add_pending_object(struct rev_info *revs, struct object *obj, const char *n add_pending_object_with_mode(revs, obj, name, S_IFINVALID); } +void add_head_to_pending(struct rev_info *revs) +{ + unsigned char sha1[20]; + struct object *obj; + if (get_sha1("HEAD", sha1)) + return; + obj = parse_object(sha1); + if (!obj) + return; + add_pending_object(revs, obj, "HEAD"); +} + static struct object *get_reference(struct rev_info *revs, const char *name, const unsigned char *sha1, unsigned int flags) { struct object *object; diff --git a/revision.h b/revision.h index 992e1e9dd5..8572315954 100644 --- a/revision.h +++ b/revision.h @@ -130,6 +130,8 @@ extern void add_object(struct object *obj, extern void add_pending_object(struct rev_info *revs, struct object *obj, const char *name); +extern void add_head_to_pending(struct rev_info *); + enum commit_action { commit_ignore, commit_show, |