Re: [PATCH] git-completion.bash: always swallow error output of for-each-ref
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 12, 2016, 20:00 UTC
- Message-ID
- <xmqqsi0xu2ac.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20160204111307.GA30495@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 15 quoted lines
> On Thu, Feb 04, 2016 at 11:34:59AM +0100, Sebastian Schuberth wrote: > >> This avoids output like >> >> warning: ignoring broken ref refs/remotes/origin/HEAD >> >> while completing branch names. > > Hmm. I feel like this case (HEAD points to a branch, then `fetch > --prune` deletes it) came up recently and we discussed quieting that > warning. But now I cannot seem to find it. > > Anyway, I this is a reasonable workaround. Errors from bash completion > scripts are almost always going to be useless and get in the way of > reading your own prompt.
I think that is absolutely the right stance to take, but then I wonder if it is a sensible execution to sprinkle 2>/dev/null everywhere.
For example, couldn't we do something like this instead?
This is just for illustration and does not remove all 2>/dev/null and replace them with a single redirection that covers the entire shell function body, but something along this line smells a lot more pleasant. I dunno.
contrib/completion/git-completion.bash | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index ba4137d..637c42d 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -47,14 +47,14 @@ __gitdir () elif [ -d .git ]; then echo .git else - git rev-parse --git-dir 2>/dev/null + git rev-parse --git-dir fi elif [ -d "$1/.git" ]; then echo "$1/.git" else echo "$1" fi -} +} 2>/dev/null # The following function is based on code from: # @@ -320,7 +320,7 @@ __git_heads () refs/heads return fi -} +} 2>/dev/null __git_tags () { @@ -330,7 +330,7 @@ __git_tags () refs/tags return fi -} +} 2>/dev/null # __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments # presence of 2nd argument means use the guess heuristic employed @@ -389,7 +389,7 @@ __git_refs () "refs/remotes/$dir/" 2>/dev/null | sed -e "s#^$dir/##" ;; esac -} +} 2>/dev/null # __git_refs2 requires 1 argument (to pass to __git_refs) __git_refs2 ()