git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 3/3] shortlog: disallow left-over arguments outside repo

From
MÅMartin Ågren <martin.agren@gmail.com>
Date
Mar 14, 2018, 21:34 UTC
Message-ID
<fa32e16aa01a46718c2fba665e8ab2c0c13bbcdf.1521062188.git.martin.agren@gmail.com>
In-Reply-To
<cover.1521062188.git.martin.agren@gmail.com>

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>
---
 t/t4201-shortlog.sh | 5 +++++
 builtin/shortlog.c  | 5 +++++
 2 files changed, 10 insertions(+)
diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh
index da10478f59..ff6649ed9a 100755
--- a/t/t4201-shortlog.sh
+++ b/t/t4201-shortlog.sh
@@ -127,6 +127,11 @@ test_expect_success !MINGW 'shortlog can read --format=raw output' '
 	test_cmp expect out
 '
 
+test_expect_success 'shortlog from non-git directory refuses extra arguments' '
+	test_must_fail env GIT_DIR=non-existing git shortlog foo 2>out &&
+	test_i18ngrep "too many arguments" out
+'
+
 test_expect_success 'shortlog should add newline when input line matches wraplen' '
 	cat >expect <<\EOF &&
 A U Thor (2):
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index dc4af03fca..3a823b3128 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -293,6 +293,11 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
 parse_done:
 	argc = parse_options_end(&ctx);
 
+	if (nongit && argc > 1) {
+		error(_("too many arguments given outside repository"));
+		usage_with_options(shortlog_usage, options);
+	}
+
 	if (setup_revisions(argc, argv, &rev, NULL) != 1) {
 		error(_("unrecognized argument: %s"), argv[1]);
 		usage_with_options(shortlog_usage, options);
-- 
2.16.2.246.ga4ee44448f
Previous: Martin ÅgrenNext: Jeff King
Message 14 of 24 in “shortlog: do not accept revisions when run outside repo”
  1. 0/3 shortlog: do not accept revisions when run outside repoMartin Ågren, Mar 10, 2018
  2. 1/3 git-shortlog.txt: reorder usagesMartin Ågren, Mar 10, 2018
  3. Junio C HamanoMar 13, 2018
  4. 2/3 shortlog: add usage-string for stdin-readingMartin Ågren, Mar 10, 2018
  5. 3/3 shortlog: do not accept revisions when run outside repoMartin Ågren, Mar 10, 2018
  6. Jonathan NiederMar 13, 2018
  7. Martin ÅgrenMar 13, 2018
  8. Jonathan NiederMar 13, 2018
  9. Junio C HamanoMar 13, 2018
  10. Martin ÅgrenMar 14, 2018
  11. 0/3 shortlog: disallow left-over arguments outside repoMartin Ågren, Mar 14, 2018
  12. 1/3 git-shortlog.txt: reorder usagesMartin Ågren, Mar 14, 2018
  13. 2/3 shortlog: add usage-string for stdin-readingMartin Ågren, Mar 14, 2018
  14. 3/3 shortlog: disallow left-over arguments outside repoMartin Ågren, Mar 14, 2018
  15. Jeff KingMar 28, 2018
  16. Martin ÅgrenMar 28, 2018
  17. 0/4 doc: cleaning up instances of \--Martin Ågren, Apr 17, 2018
  18. 1/4 doc: convert \--option to --optionMartin Ågren, Apr 17, 2018
  19. 2/4 doc: convert [\--] to [--]Martin Ågren, Apr 17, 2018
  20. 3/4 git-[short]log.txt: unify quoted standalone --Martin Ågren, Apr 17, 2018
  21. 4/4 git-submodule.txt: quote usage in monospace, drop backslashMartin Ågren, Apr 17, 2018
  22. Junio C HamanoApr 18, 2018
  23. Jeff KingMay 10, 2018
  24. brian m. carlsonApr 19, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.