completion: inline __gitcomp_1 to its sole callsite

There is no point in calling a separate function that is only used
in one place. Especially considering that there's no need to call
compgen, and we traverse the words ourselves both in __gitcompadd,
and __gitcomp_1.

Let's squash the functions together, and traverse only once.

This improves performance. For N number of words:

  == 1 ==
  original: 0.002s
  new: 0.000s
  == 10 ==
  original: 0.005s
  new: 0.001s
  == 100 ==
  original: 0.009s
  new: 0.006s
  == 1000 ==
  original: 0.027s
  new: 0.019s
  == 10000 ==
  original: 0.163s
  new: 0.151s
  == 100000 ==
  original: 1.555s
  new: 1.497s

No functional changes.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Felipe Contreras 2013-04-10 01:57:56 -05:00 коммит произвёл Junio C Hamano
Родитель 7d13e0a3af
Коммит b4cfbc969c
1 изменённых файлов: 11 добавлений и 15 удалений

Просмотреть файл

@ -53,19 +53,6 @@ __gitdir ()
fi
}
__gitcomp_1 ()
{
local c IFS=$' \t\n'
for c in $1; do
c="$c$2"
case $c in
--*=*|*.) ;;
*) c="$c " ;;
esac
printf '%s\n' "$c"
done
}
# The following function is based on code from:
#
# bash_completion - programmable completion functions for bash 3.2+
@ -220,8 +207,17 @@ __gitcomp ()
--*=)
;;
*)
local IFS=$'\n'
__gitcompadd "$(__gitcomp_1 "${1-}" "${4-}")" "${2-}" "$cur_" ""
local c i=0 IFS=$' \t\n'
for c in $1; do
c="$c${4-}"
case $c in
--*=*|*.) ;;
*) c="$c " ;;
esac
if [[ $c == "$cur_"* ]]; then
COMPREPLY[i++]="${2-}$c"
fi
done
;;
esac
}