shortlog: disallow left-over arguments outside repo

If we are outside a repo and have any arguments left after option-parsing, `setup_revisions()` will try to do its job and something like this will happen: $ git shortlog v2.16.0.. BUG: environment.c:183: git environment hasn't been setup Aborted (core dumped) The usage is wrong, but we could obviously handle this better. Note that commit abe549e179 (shortlog: do not require to run from inside a git repository, 2008-03-14) explicitly enabled `git shortlog` to run from outside a repo, since we do not need a repo for parsing data from stdin. Disallow left-over arguments when run from outside a repo. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Martin Ågren committed Mar 14, 2018 at 22:34 UTC 4aa0161e837ef19e52f3bc65471d9ec0f857e20d
2 files changed +10
builtin/shortlog.c
+5
@@ -293,6 +293,11 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
293 parse_done:
294 argc = parse_options_end(&ctx);
295
296 + if (nongit && argc > 1) {
297 + error(_("too many arguments given outside repository"));
298 + usage_with_options(shortlog_usage, options);
299 + }
300 +
301 if (setup_revisions(argc, argv, &rev, NULL) != 1) {
302 error(_("unrecognized argument: %s"), argv[1]);
303 usage_with_options(shortlog_usage, options);
t/t4201-shortlog.sh
+5
@@ -127,6 +127,11 @@ test_expect_success !MINGW 'shortlog can read --format=raw output' '
127 test_cmp expect out
128 '
129
130 +test_expect_success 'shortlog from non-git directory refuses extra arguments' '
131 + test_must_fail env GIT_DIR=non-existing git shortlog foo 2>out &&
132 + test_i18ngrep "too many arguments" out
133 +'
134 +
135 test_expect_success 'shortlog should add newline when input line matches wraplen' '
136 cat >expect <<\EOF &&
137 A U Thor (2):