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

[PATCH 3/3] shortlog: do not accept revisions when run outside repo

From
MÅMartin Ågren <martin.agren@gmail.com>
Date
Mar 10, 2018, 11:52 UTC
Message-ID
<78669e644b64fc10c34adb59717d2039f81cb092.1520680894.git.martin.agren@gmail.com>
In-Reply-To
<cover.1520680894.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. Another approach would be to disallow them when reading from stdin. However, our logic is currently the other way round: we check the number of revisions in order to decide whether we should read from stdin. (So yes, after this patch, we will still silently ignore stdin for confused usage such as `git log v2.15.0.. | git shortlog v2.16.0..`. But at least that does not crash.)

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
 t/t4201-shortlog.sh | 5 +++++
 builtin/shortlog.c  | 6 ++++++
 2 files changed, 11 insertions(+)
diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh
index da10478f5..78c5645a9 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 revisions' '
+	test_must_fail env GIT_DIR=non-existing git shortlog HEAD 2>out &&
+	test_i18ngrep "no revisions can be given" 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 dc4af03fc..35e8c1ead 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -293,6 +293,12 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
 parse_done:
 	argc = parse_options_end(&ctx);
 
+	if (nongit && argc != 1) {
+		error(_("no revisions can be given when running "
+			"from outside a 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: Jonathan Nieder
Message 5 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.