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

Re: [PATCH 2/3] mergetool: dissect strings with shell variable magic instead of `expr`

From
Johannes Sixt <j6t@kdbg.org>
Date
Jun 10, 2019, 21:34 UTC
Message-ID
<0a350943-9264-1a40-6452-91a990ec790d@kdbg.org>
In-Reply-To
<xmqqblz5nyve.fsf@gitster-ct.c.googlers.com>
Am 10.06.19 um 19:17 schrieb Junio C Hamano:
Show 9 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
>> git-mergetool spawns an enormous amount of processes. For this reason,
>> the test script, t7610, is exceptionally slow, in particular, on
>> Windows. Most of the processes are invocations of git, but there are
>> also some that can be replaced with shell builtins. Do so with `expr`.
> 
> I see these as improvements independent of whatever test may or may
> not be slow ;-)  s/^.*/but there are/There are/.  Thanks for working
> on it.
Noted.
Show 17 quoted lines
>> @@ -255,13 +254,16 @@ merge_file () {
>>  		return 1
>>  	fi
>>  
>> -	if BASE=$(expr "$MERGED" : '\(.*\)\.[^/]*$')
>> -	then
>> -		ext=$(expr "$MERGED" : '.*\(\.[^/]*\)$')
>> -	else
>> +	# extract file extension from the last path component
>> +	case "${MERGED##*/}" in
>> +	*.*)
>> +		ext=.${MERGED##*.}
>> +		BASE=${MERGED%"$ext"}
> 
> This rewrite can potentially change the behaviour, when $ext has
> glob metacharacters.  Wouldn't BASE=${MERGED%.*} be more faithful
> conversion?

Since "$ext" is quoted inside the braces of the parameter expansion, the pattern counts as quoted, so all glob characters in $ext lose their special meaning. At least that's how I read the spec.

I do see the symmetry in your proposed version. Nevertheless, I have a slight preference for my version because it specifies exactly what is to be removed from the end of value.

-- Hannes
Previous: Junio C HamanoNext: Johannes Sixt
Message 10 of 18 in “Reduce number of processes spawned by git-mergetool”
  1. 0/3 Reduce number of processes spawned by git-mergetoolJohannes Sixt, Jun 10, 2019
  2. 1/3 t7610-mergetool: do not place pipelines headed by `yes` in subshellsJohannes Sixt, Jun 10, 2019
  3. SZEDER GáborJun 10, 2019
  4. Junio C HamanoJun 10, 2019
  5. SZEDER GáborJun 10, 2019
  6. Johannes SchindelinJun 10, 2019
  7. SZEDER GáborJun 10, 2019
  8. 2/3 mergetool: dissect strings with shell variable magic instead of `expr`Johannes Sixt, Jun 10, 2019
  9. Junio C HamanoJun 10, 2019
  10. Johannes SixtJun 10, 2019
  11. 3/3 mergetool: use shell variable magic instead of `awk`Johannes Sixt, Jun 10, 2019
  12. Junio C HamanoJun 10, 2019
  13. Johannes SixtJun 10, 2019
  14. 0/4 Reduce number of processes spawned by git-mergetoolJohannes Sixt, Jun 12, 2019
  15. 3/4 mergetool: dissect strings with shell variable magic instead of `expr`Johannes Sixt, Jun 12, 2019
  16. 4/4 mergetool: use shell variable magic instead of `awk`Johannes Sixt, Jun 12, 2019
  17. 1/4 t7610-mergetool: do not place pipelines headed by `yes` in subshellsJohannes Sixt, Jun 12, 2019
  18. 2/4 t7610-mergetool: use test_cmp instead of test $(cat file) = $txtJohannes Sixt, Jun 12, 2019

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.