completion: bash: check for alias loop

We don't want to be stuck in an endless cycle. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Felipe Contreras committed Nov 9, 2020 at 20:03 UTC c2822a842dc993722a9d6f8226189312b95d8801
1 file changed +8 -3
contrib/completion/git-completion.bash
+8 -3
@@ -1120,11 +1120,16 @@ __git_pretty_aliases ()
1120 # __git_aliased_command requires 1 argument
1121 __git_aliased_command ()
1122 {
1123 - local cur=$1 last word cmdline
1123 + local cur=$1 list word cmdline
1124
1125 while [[ -n "$cur" ]]; do
1126 + if [[ "$list" == *"$cur "* ]]; then
1127 + # loop detected
1128 + return
1129 + fi
1130 +
1131 cmdline=$(__git config --get "alias.$cur")
1127 - last=$cur
1132 + list="$cur $list"
1133 cur=
1134
1135 for word in $cmdline; do
@@ -1148,7 +1153,7 @@ __git_aliased_command ()
1153 done
1154 done
1155
1151 - cur=$last
1156 + cur="${list%% *}"
1157 if [[ "$cur" != "$1" ]]; then
1158 echo "$cur"
1159 fi