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

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

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Mar 13, 2018, 19:56 UTC
Message-ID
<20180313195640.GA147135@aiede.svl.corp.google.com>
In-Reply-To
<78669e644b64fc10c34adb59717d2039f81cb092.1520680894.git.martin.agren@gmail.com>
Hi,
Martin Ågren wrote:
Show 7 quoted lines
> 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)
Yikes.  Thanks for fixing it.
[...]
>                                                       (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.)

I don't follow here. Are you saying this command should notice that there is input in stdin? How would it notice?

[...]
Show 10 quoted lines
> --- 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
> +'
\o/
[...]
Show 7 quoted lines
> --- 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) {
Just curious: would argc ever be 0 here?  'argc <= 1' might be clearer.
Show 5 quoted lines
> +		error(_("no revisions can be given when running "
> +			"from outside a repository"));
> +		usage_with_options(shortlog_usage, options);
> +	}
> +
The error message is
	error: no revisions can be given when running from outside a repository
	usage: ...

Do we need to dump usage here? I wonder if a simple die() call would be easier for the user to act on.

Not about this patch: I was a little surprised to see 'error:' instead of 'usage:' or 'fatal:'. It turns out git is pretty inconsistent about that: e.g. there is

	error(_("no remote specified"));
	usage_with_options(builtin_remote_setbranches_usage, options);

Some other callers just use usage_with_options without describing the error. check-attr has a private error_with_usage() helper to implement the error() followed by usage_with_options() idiom. Most callers just use die(), like

	die(_("'%s' cannot be used with %s"), "--merge", "--patch");
Documentation/technical/api-error-handling.txt says
 - `usage` is for errors in command line usage.  After printing its
   message, it exits with status 129.  (See also `usage_with_options`
   in the link:api-parse-options.html[parse-options API].)
which is not prescriptive enough to help.

Separate from that, I wonder if the error message can be made a little shorter and clearer. E.g.

	fatal: shortlog <revs> can only be used inside a git repository

Thanks and hope that helps, Jonathan

Previous: Martin ÅgrenNext: Martin Ågren
Message 6 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.