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

Re: [PATCH] describe --contains: default to HEAD when no commit-ish is given

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Aug 24, 2015, 16:14 UTC
Message-ID
<20150824181417.Horde.2DAlveA2ZaXbdApUl8wLOQ8@webmail.informatik.kit.edu>
In-Reply-To
<xmqqoai07gen.fsf@gitster.dls.corp.google.com>
Quoting Junio C Hamano <gitster@pobox.com>:
Show 15 quoted lines
>> @@ -443,10 +443,13 @@ int cmd_describe(int argc, const char **argv,  
>> const char *prefix)
>>  			if (pattern)
>>  				argv_array_pushf(&args, "--refs=refs/tags/%s", pattern);
>>  		}
>> -		while (*argv) {
>> -			argv_array_push(&args, *argv);
>> -			argv++;
>> -		}
>> +		if (argc)
>
> "What would this code do to 'describe --all --contains'?" was my
> knee-jerk reaction, but the options are all parsed by this code and
> nothing is delegated to name-rev, so 'if (!argc)' here is truly the
> lack of any revisions to be described, which is good.

Exactly. parse-opts removes all --options from argv as it processes them, barfs at --unknown-options, so all what remains must be treated as a commit-ish. And if nothing is left, well, then there was none given.

Show 29 quoted lines
>> +			while (*argv) {
>> +				argv_array_push(&args, *argv);
>> +				argv++;
>> +			}
>> +		else
>> +			argv_array_push(&args, "HEAD");
>
> By the way, I usually prefer a fatter 'else' clause when everything
> else is equal, i.e.
>
> 	if (!argc)
>         	argv_array_push(&args, "HEAD"); /* default to HEAD */
> 	else {
> 		while (*argv) {
>                 	...
> 		}
> 	}
>
> because it is easy to miss tiny else-clause while reading code, but
> it is harder to miss tiny then-clause.  In this case, however, the
> while loop can be replaced with argv_array_pushv() these days, so
> perhaps
>
> 	if (!argc)
>         	argv_array_push(&args, "HEAD"); /* default to HEAD ... */
> 	else
> 		argv_array_pushv(&args, argv); /* or relay what we got */
>
> or something?

Indeed, I didn't notice argv_array_pushv() being added, log tells me it happened quite recently. I suppose with both branches becoming a one-liner the order of them can remain what it was in the patch, this sparing the negation from 'if (!argc)'.

v2 comes in a minute.
Gábor
Previous: Junio C HamanoNext: SZEDER Gábor
Message 7 of 9 in “describe: make '--always' fallback work after '--exact-match' failed”
  1. describe: make '--always' fallback work after '--exact-match' failedSZEDER Gábor, Aug 20, 2015
  2. Junio C HamanoAug 20, 2015
  3. SZEDER GáborAug 21, 2015
  4. Junio C HamanoAug 21, 2015
  5. describe --contains: default to HEAD when no commit-ish is givenSZEDER Gábor, Aug 21, 2015
  6. Junio C HamanoAug 21, 2015
  7. SZEDER GáborAug 24, 2015
  8. describe --contains: default to HEAD when no commit-ish is givenSZEDER Gábor, Aug 24, 2015
  9. Junio C HamanoAug 24, 2015

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.