Re: [PATCH] completion: fix issue with process substitution not working on Git for Windows
From: Stefan Näwe <hidden>
Date: 2016-06-15 22:52:19
Am 25. Oktober 2011 22:39 schrieb Johannes Sixt [off-list ref]:
Am 25.10.2011 20:01, schrieb Stefan Naewe:quoted
Git for Windows comes with a bash that doesn't support process substitution. It issues the following error when using git-completion.bash with GIT_PS1_SHOWUPSTREAM set: $ export GIT_PS1_SHOWUPSTREAM=1 sh.exe": cannot make pipe for process substitution: Function not implemented sh.exe": cannot make pipe for process substitution: Function not implemented sh.exe": <(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n '): ambiguous redirect Replace the process substitution with a simple "echo $var | while...". Signed-off-by: Stefan Naewe <redacted> --- contrib/completion/git-completion.bash | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 8648a36..926db80 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash@@ -110,6 +110,8 @@ __git_ps1_show_upstream ()local upstream=git legacy="" verbose="" # get some config options from git-config + output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" + echo "$output" | \ while read key value; do case "$key" in bash.showupstream)@@ -125,7 +127,7 @@ __git_ps1_show_upstream ()upstream=svn+git # default upstream is SVN if available, else git ;; esac - done < <(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ') + done # parse configuration values for option in ${GIT_PS1_SHOWUPSTREAM}; doAre you sure that the result still works as intended? The while loop sets a few variables. When you place it in a pipe, the loop runs in a subshell, and subsequent code will not see the modified values. Unless bash knows how to optimize away the subshell, that is.
I doesn't work in the 'git svn' case, I guess.
OTOH, when you use while ...; do ...; done < <(...), the while loop is not in a subshell. An alternative is to use: while ...; do ...; done <<< "$output"
I'll try that.
BTW, you don't need to protect the end-of-line with a backslash if the line ends with the pipe symbol.
OK. Will do.
-- Hannes
Thanks,
Stefan
--
----------------------------------------------------------------
python -c "print '73746566616e2e6e6165776540676d61696c2e636f6d'.decode('hex')"