From 66b2ed09c2f0f212c5cd5c095c1f1052ecbb9491 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 20 Jan 2010 13:59:36 -0800 Subject: Fix "log" family not to be too agressive about showing notes Giving "Notes" information in the default output format of "log" and "show" is a sensible progress (the user has asked for it by having the notes), but for some commands (e.g. "format-patch") spewing notes into the formatted commit log message without being asked is too aggressive. Enable notes output only for "log", "show", "whatchanged" by default and only when the user didn't ask any specific --pretty/--format from the command line; users can explicitly override this default with --show-notes and --no-notes option. Parts of tests are taken from Jeff King's fix. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- Documentation/pretty-options.txt | 8 ++++++ builtin-log.c | 3 +++ commit.h | 1 + log-tree.c | 1 + pretty.c | 2 +- revision.c | 8 ++++++ revision.h | 3 +++ t/t3301-notes.sh | 57 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 82 insertions(+), 1 deletion(-) diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt index bff94991b6..1401200920 100644 --- a/Documentation/pretty-options.txt +++ b/Documentation/pretty-options.txt @@ -28,3 +28,11 @@ people using 80-column terminals. command to re-code the commit log message in the encoding preferred by the user. For non plumbing commands this defaults to UTF-8. + +--no-notes:: +--show-notes:: + Show the notes (see linkgit:git-notes[1]) that annotate the + commit, when showing the commit log message. This is the default + for `git log`, `git show` and `git whatchanged` commands when + there is no `--pretty` nor `--format` option is given on the + command line. diff --git a/builtin-log.c b/builtin-log.c index 1766349550..2cb292fa72 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -58,6 +58,9 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix, usage(builtin_log_usage); argc = setup_revisions(argc, argv, rev, "HEAD"); + if (!rev->show_notes_given && !rev->pretty_given) + rev->show_notes = 1; + if (rev->diffopt.pickaxe || rev->diffopt.filter) rev->always_show_header = 0; if (DIFF_OPT_TST(&rev->diffopt, FOLLOW_RENAMES)) { diff --git a/commit.h b/commit.h index e5332efcfc..2c0742b721 100644 --- a/commit.h +++ b/commit.h @@ -70,6 +70,7 @@ struct pretty_print_context const char *after_subject; enum date_mode date_mode; int need_8bit_cte; + int show_notes; struct reflog_walk_info *reflog_info; }; diff --git a/log-tree.c b/log-tree.c index 0fdf159f80..27afcf6972 100644 --- a/log-tree.c +++ b/log-tree.c @@ -284,6 +284,7 @@ void show_log(struct rev_info *opt) struct pretty_print_context ctx = {0}; opt->loginfo = NULL; + ctx.show_notes = opt->show_notes; if (!opt->verbose_header) { graph_show_commit(opt->graph); diff --git a/pretty.c b/pretty.c index 8f5bd1ab7f..b2ee7fe9de 100644 --- a/pretty.c +++ b/pretty.c @@ -1094,7 +1094,7 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit, if (fmt == CMIT_FMT_EMAIL && sb->len <= beginning_of_body) strbuf_addch(sb, '\n'); - if (fmt != CMIT_FMT_ONELINE) + if (context->show_notes) get_commit_notes(commit, sb, encoding, NOTES_SHOW_HEADER | NOTES_INDENT); diff --git a/revision.c b/revision.c index a8a3c3a4bd..0de78fbad6 100644 --- a/revision.c +++ b/revision.c @@ -1161,10 +1161,18 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->verbose_header = 1; } else if (!strcmp(arg, "--pretty")) { revs->verbose_header = 1; + revs->pretty_given = 1; get_commit_format(arg+8, revs); } else if (!prefixcmp(arg, "--pretty=") || !prefixcmp(arg, "--format=")) { revs->verbose_header = 1; + revs->pretty_given = 1; get_commit_format(arg+9, revs); + } else if (!strcmp(arg, "--show-notes")) { + revs->show_notes = 1; + revs->show_notes_given = 1; + } else if (!strcmp(arg, "--no-notes")) { + revs->show_notes = 0; + revs->show_notes_given = 1; } else if (!strcmp(arg, "--oneline")) { revs->verbose_header = 1; get_commit_format("oneline", revs); diff --git a/revision.h b/revision.h index d368003159..a14deefc25 100644 --- a/revision.h +++ b/revision.h @@ -80,6 +80,9 @@ struct rev_info { /* Format info */ unsigned int shown_one:1, show_merge:1, + show_notes:1, + show_notes_given:1, + pretty_given:1, abbrev_commit:1, use_terminator:1, missing_newline:1, diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh index 1e34f4836f..977d653651 100755 --- a/t/t3301-notes.sh +++ b/t/t3301-notes.sh @@ -147,4 +147,61 @@ test_expect_success 'show -m and -F notes' ' test_cmp expect-m-and-F output ' +cat >expect << EOF +commit 15023535574ded8b1a89052b32673f84cf9582b8 +tree e070e3af51011e47b183c33adf9736736a525709 +parent 1584215f1d29c65e99c6c6848626553fdd07fd75 +author A U Thor 1112912173 -0700 +committer C O Mitter 1112912173 -0700 + + 4th +EOF +test_expect_success 'git log --pretty=raw does not show notes' ' + git log -1 --pretty=raw >output && + test_cmp expect output +' + +cat >>expect <output && + test_cmp expect output +' + +test_expect_success 'git log --no-notes' ' + git log -1 --no-notes >output && + ! grep spam output +' + +test_expect_success 'git format-patch does not show notes' ' + git format-patch -1 --stdout >output && + ! grep spam output +' + +test_expect_success 'git format-patch --show-notes does show notes' ' + git format-patch --show-notes -1 --stdout >output && + grep spam output +' + +for pretty in "" raw short medium full fuller format:%s +do + case "$pretty" in + "") p= not= negate="" ;; + ?*) p="--pretty=$pretty" not=" not" negate="!" ;; + esac + test_expect_success "git show $pretty does$not show notes" ' + git show $p >output && + eval "$negate grep spam output" + ' +done + test_done -- cgit v1.2.3 From 7dccadf363f9d9ff564ad34117266b2d557a2bc8 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 21 Jan 2010 14:57:41 -0800 Subject: Fix "log --oneline" not to show notes This option should be treated pretty much the same as --format="%h %s". Signed-off-by: Junio C Hamano --- Documentation/pretty-options.txt | 4 ++-- revision.c | 1 + t/t3301-notes.sh | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt index 1401200920..aa96caeab2 100644 --- a/Documentation/pretty-options.txt +++ b/Documentation/pretty-options.txt @@ -34,5 +34,5 @@ people using 80-column terminals. Show the notes (see linkgit:git-notes[1]) that annotate the commit, when showing the commit log message. This is the default for `git log`, `git show` and `git whatchanged` commands when - there is no `--pretty` nor `--format` option is given on the - command line. + there is no `--pretty`, `--format` nor `--oneline` option is + given on the command line. diff --git a/revision.c b/revision.c index 0de78fbad6..34f9ab98d1 100644 --- a/revision.c +++ b/revision.c @@ -1176,6 +1176,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg } else if (!strcmp(arg, "--oneline")) { revs->verbose_header = 1; get_commit_format("oneline", revs); + revs->pretty_given = 1; revs->abbrev_commit = 1; } else if (!strcmp(arg, "--graph")) { revs->topo_order = 1; diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh index 977d653651..5d9604b815 100755 --- a/t/t3301-notes.sh +++ b/t/t3301-notes.sh @@ -192,11 +192,13 @@ test_expect_success 'git format-patch --show-notes does show notes' ' grep spam output ' -for pretty in "" raw short medium full fuller format:%s +for pretty in \ + "" --pretty --pretty=raw --pretty=short --pretty=medium \ + --pretty=full --pretty=fuller --pretty=format:%s --oneline do case "$pretty" in "") p= not= negate="" ;; - ?*) p="--pretty=$pretty" not=" not" negate="!" ;; + ?*) p="$pretty" not=" not" negate="!" ;; esac test_expect_success "git show $pretty does$not show notes" ' git show $p >output && -- cgit v1.2.3