Junio C Hamano <gits...@pobox.com> writes:

> After all, I was right when I said that some implementations may get
> it wrong and we shouldn't use the construct X-<.
>> These two instances seem to be the only ones in the file.
>> I'm not sure whether the 2>/dev/null would be needed for the command
>> on the RHS of the && too (git ls-files and git diff-index).
> It would not hurt to discard their standard error.

So here is an updated based on your patch.

-- >8 --
From: Matthieu Moy <matthieu....@imag.fr>
Date: Mon, 11 Mar 2013 13:21:27 +0100
Subject: [PATCH] git-completion.bash: zsh does not implement function
 redirection correctly

A recent change added functions whose entire standard error stream
is redirected to /dev/null using a construct that is valid POSIX.1
but is not widely used:

        funcname () {
        } 2>/dev/null

Even though this file is "git-completion.bash", zsh completion
support dot-sources it (instead of asking bash to grok it like tcsh
completion does), and zsh does not implement this redirection

With zsh, trying to complete an inexistant directory gave this:

  git add no-such-dir/__git_ls_files_helper:cd:2: no such file or directory: 

It is easy to work around by refraining from using this construct.
The correct thing to do in the longer term may be to stop dot-sourcing
the source meant for bash into zsh, but this patch should suffice as
a band-aid in the meantime.

Signed-off-by: Matthieu Moy <matthieu....@imag.fr>
Signed-off-by: Junio C Hamano <gits...@pobox.com>
 contrib/completion/git-completion.bash | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/contrib/completion/git-completion.bash 
index 51b8b3b..3d4cc7c 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -300,8 +300,8 @@ __git_index_file_list_filter ()
 __git_ls_files_helper ()
        # NOTE: $2 is not quoted in order to support multiple options
-       cd "$1" && git ls-files --exclude-standard $2
-} 2>/dev/null
+       cd "$1" 2>/dev/null && git ls-files --exclude-standard $2 2>/dev/null
 # Execute git diff-index, returning paths relative to the directory
@@ -309,8 +309,8 @@ __git_ls_files_helper ()
 # specified in the second argument.
 __git_diff_index_helper ()
-       cd "$1" && git diff-index --name-only --relative "$2"
-} 2>/dev/null
+       cd "$1" 2>/dev/null && git diff-index --name-only --relative "$2" 
 # __git_index_files accepts 1 or 2 arguments:
 # 1: Options to pass to ls-files (required).

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to