Skip to content

Commit f9c75d8

Browse files
peffgitster
authored andcommitted
log: fix --quiet synonym for -s
Originally the "--quiet" option was parsed by the diff-option parser into the internal QUICK option. This had the effect of silencing diff output from the log (which was not intended, but happened to work and people started to use it). But it also had other odd side effects at the diff level (for example, it would suppress the second commit in "git show A B"). To fix this, commit 1c40c36 converted log to parse-options and handled the "quiet" option separately, not passing it on to the diff code. However, it simply ignored the option, which was a regression for people using it as a synonym for "-s". Commit 01771a8 then fixed that by interpreting the option to add DIFF_FORMAT_NO_OUTPUT to the list of output formats. However, that commit did not fix it in all cases. It sets the flag after setup_revisions is called. Naively, this makes sense because you would expect the setup_revisions parser to overwrite our output format flag if "-p" or another output format flag is seen. However, that is not how the NO_OUTPUT flag works. We actually store it in the bit-field as just another format. At the end of setup_revisions, we call diff_setup_done, which post-processes the bitfield and clears any other formats if we have set NO_OUTPUT. By setting the flag after setup_revisions is done, diff_setup_done does not have a chance to make this tweak, and we end up with other format options still set. As a result, the flag would have no effect in "git log -p --quiet" or "git show --quiet". Fix it by setting the format flag before the call to setup_revisions. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b521831 commit f9c75d8

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

builtin/log.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
108108
PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN |
109109
PARSE_OPT_KEEP_DASHDASH);
110110

111-
argc = setup_revisions(argc, argv, rev, opt);
112111
if (quiet)
113112
rev->diffopt.output_format |= DIFF_FORMAT_NO_OUTPUT;
113+
argc = setup_revisions(argc, argv, rev, opt);
114114

115115
/* Any arguments at this point are not recognized */
116116
if (argc > 1)

t/t7007-show.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,16 @@ test_expect_success 'showing range' '
108108
test_cmp expect actual.filtered
109109
'
110110

111+
test_expect_success '-s suppresses diff' '
112+
echo main3 >expect &&
113+
git show -s --format=%s main3 >actual &&
114+
test_cmp expect actual
115+
'
116+
117+
test_expect_success '--quiet suppresses diff' '
118+
echo main3 >expect &&
119+
git show --quiet --format=%s main3 >actual &&
120+
test_cmp expect actual
121+
'
122+
111123
test_done

0 commit comments

Comments
 (0)