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

Re: [PATCH v3 2/2] completion: bash: check for alias loop

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 12, 2020, 17:20 UTC
Message-ID
<xmqqsg9ejxu0.fsf@gitster.c.googlers.com>
In-Reply-To
<20201112100204.GC4270@szeder.dev>
SZEDER Gábor <szeder.dev@gmail.com> writes:
Show 16 quoted lines
>>  	while [[ -n "$cur" ]]; do
>> +		if [[ "$list" == *"$cur "* ]]; then
>
> I suspect the right hand side should be *" $cur "* ...
>
>> +			# loop detected
>> +			return
>> +		fi
>> +
>>  		cmdline=$(__git config --get "alias.$cur")
>> -		last=$cur
>> +		list="$cur $list"
>
> ... and this should be list=" $cur $list", because otherwise a partial
> match is possible and would be mistaken for a loop (though I didn't
> actually test whether that's indeed the case).
Traditionist may use
	list=
	while :
	do
		cur=$(obtain cur somehow)
                case " $list " in
                *" $cur "*) : cur appears in list ;;
                esac
                list="$cur${list+ }$list"
	done

to make the invariant "$list is a SP-separated tokens, no extra SP on either ends" and I think the same idea would work with [[ $a == $b ]], but "one SP on both ends, two SPs in between" like yours do is OK, too.

Not keeping excess SPs out of the list (unlike the above "no extra SP on ends") means how "finally, take the first token in the list, that's the answer" is coded, though. You'd need to split off the leading SP from it (below).

Show 15 quoted lines
>>  		cur=
>>  
>>  		for word in $cmdline; do
>> @@ -1149,7 +1154,7 @@ __git_aliased_command ()
>>  		done
>>  	done
>>  
>> -	cur=$last
>> +	cur="${list%% *}"
>>  	if [[ "$cur" != "$1" ]]; then
>>  		echo "$cur"
>>  	fi
>> -- 
>> 2.29.2
>> 
Previous: SZEDER Gábor
Message 5 of 5 in “completion: bash: support for recursive aliases”
  1. 0/2 completion: bash: support for recursive aliasesFelipe Contreras, Nov 10, 2020
  2. 1/2 completion: bash: support recursive aliasesFelipe Contreras, Nov 10, 2020
  3. 2/2 completion: bash: check for alias loopFelipe Contreras, Nov 10, 2020
  4. SZEDER GáborNov 12, 2020
  5. Junio C HamanoNov 12, 2020

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.