completion: consolidate silencing errors from git commands

Outputting error messages during completion is bad: they disrupt the
command line, can't be deleted, and the user is forced to Ctrl-C and
start over most of the time.  We already silence stderr of many git
commands in our Bash completion script, but there are still some in
there that can spew error messages when something goes wrong.

We could add the missing stderr redirections to all the remaining
places, but instead let's leverage that git commands are now executed
through the previously introduced __git() wrapper function, and
redirect standard error to /dev/null only in that function.  This way
we need only one redirection to take care of errors from almost all
git commands.  Redirecting standard error of the __git() wrapper
function thus became redundant, remove them.

The exceptions, i.e. the repo-independent git executions and those in
the __gitdir() function that don't go through __git() already have
their standard error silenced.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
SZEDER Gábor 2017-02-03 03:48:26 +01:00 коммит произвёл Junio C Hamano
Родитель 1cd23e9e05
Коммит e15098a314
1 изменённых файлов: 12 добавлений и 16 удалений

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

@ -66,7 +66,7 @@ __gitdir ()
__git ()
{
git ${__git_C_args:+"${__git_C_args[@]}"} \
${__git_dir:+--git-dir="$__git_dir"} "$@"
${__git_dir:+--git-dir="$__git_dir"} "$@" 2>/dev/null
}
# The following function is based on code from:
@ -300,7 +300,7 @@ __git_ls_files_helper ()
else
# NOTE: $2 is not quoted in order to support multiple options
__git -C "$1" ls-files --exclude-standard $2
fi 2>/dev/null
fi
}
@ -410,7 +410,7 @@ __git_refs ()
fi
case "$cur" in
refs|refs/*)
__git ls-remote "$remote" "$cur*" 2>/dev/null | \
__git ls-remote "$remote" "$cur*" | \
while read -r hash i; do
case "$i" in
*^{}) ;;
@ -422,10 +422,10 @@ __git_refs ()
if [ "$list_refs_from" = remote ]; then
echo "HEAD"
__git for-each-ref --format="%(refname:short)" \
"refs/remotes/$remote/" 2>/dev/null | sed -e "s#^$remote/##"
"refs/remotes/$remote/" | sed -e "s#^$remote/##"
else
__git ls-remote "$remote" HEAD \
"refs/tags/*" "refs/heads/*" "refs/remotes/*" 2>/dev/null |
"refs/tags/*" "refs/heads/*" "refs/remotes/*" |
while read -r hash i; do
case "$i" in
*^{}) ;;
@ -451,7 +451,7 @@ __git_refs2 ()
__git_refs_remotes ()
{
local i hash
__git ls-remote "$1" 'refs/heads/*' 2>/dev/null | \
__git ls-remote "$1" 'refs/heads/*' | \
while read -r hash i; do
echo "$i:refs/remotes/$1/${i#refs/heads/}"
done
@ -527,7 +527,7 @@ __git_complete_revlist_file ()
*) pfx="$ref:$pfx" ;;
esac
__gitcomp_nl "$(__git ls-tree "$ls" 2>/dev/null \
__gitcomp_nl "$(__git ls-tree "$ls" \
| sed '/^100... blob /{
s,^.* ,,
s,$, ,
@ -805,7 +805,7 @@ __git_compute_porcelain_commands ()
__git_get_config_variables ()
{
local section="$1" i IFS=$'\n'
for i in $(__git config --name-only --get-regexp "^$section\..*" 2>/dev/null); do
for i in $(__git config --name-only --get-regexp "^$section\..*"); do
echo "${i#$section.}"
done
}
@ -823,7 +823,7 @@ __git_aliases ()
# __git_aliased_command requires 1 argument
__git_aliased_command ()
{
local word cmdline=$(__git config --get "alias.$1" 2>/dev/null)
local word cmdline=$(__git config --get "alias.$1")
for word in $cmdline; do
case "$word" in
\!gitk|gitk)
@ -1841,9 +1841,7 @@ _git_send_email ()
{
case "$prev" in
--to|--cc|--bcc|--from)
__gitcomp "
$(__git send-email --dump-aliases 2>/dev/null)
"
__gitcomp "$(__git send-email --dump-aliases)"
return
;;
esac
@ -1873,9 +1871,7 @@ _git_send_email ()
return
;;
--to=*|--cc=*|--bcc=*|--from=*)
__gitcomp "
$(__git send-email --dump-aliases 2>/dev/null)
" "" "${cur#--*=}"
__gitcomp "$(__git send-email --dump-aliases)" "" "${cur#--*=}"
return
;;
--*)
@ -1969,7 +1965,7 @@ __git_config_get_set_variables ()
c=$((--c))
done
__git config $config_file --name-only --list 2>/dev/null
__git config $config_file --name-only --list
}
_git_config ()