From: Stefan Naewe <hidden> Date: 2016-06-15 22:52:19
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(-)
@@ -110,6 +110,8 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"+echo"$output"|\whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +127,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done# parse configuration valuesforoptionin${GIT_PS1_SHOWUPSTREAM};do
From: Johannes Sixt <hidden> Date: 2016-06-15 22:52:19
Am 25.10.2011 20:01, schrieb Stefan Naewe:
quoted hunk
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(-)
@@ -110,6 +110,8 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"+echo"$output"|\whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +127,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done# parse configuration valuesforoptionin${GIT_PS1_SHOWUPSTREAM};do
Are 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.
OTOH, when you use while ...; do ...; done < <(...), the while loop is
not in a subshell.
An alternative is to use: while ...; do ...; done <<< "$output"
BTW, you don't need to protect the end-of-line with a backslash if the
line ends with the pipe symbol.
-- Hannes
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(-)
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}; do
Are 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')"
From: Stefan Naewe <hidden> Date: 2016-06-15 22:52:19
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 'here string'.
Signed-off-by: Stefan Naewe <redacted>
---
contrib/completion/git-completion.bash | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
@@ -110,6 +110,7 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +126,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done<<<"$output"# parse configuration valuesforoptionin${GIT_PS1_SHOWUPSTREAM};do
From: Junio C Hamano <hidden> Date: 2016-06-15 22:52:19
Stefan Naewe [off-list ref] writes:
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 'here string'.
Signed-off-by: Stefan Naewe <redacted>
Yuck, but I honestly shouldn't care about the yuckiness as this script is
inherently intimately dependent on bash anyway ;-).
@@ -110,6 +110,7 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +126,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done<<<"$output"# parse configuration valuesforoptionin${GIT_PS1_SHOWUPSTREAM};do
From: SZEDER Gábor <hidden> Date: 2016-06-15 22:52:20
On Wed, Oct 26, 2011 at 09:13:09PM +0200, Stefan Naewe wrote:
quoted hunk
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 'here string'.
Signed-off-by: Stefan Naewe <redacted>
---
contrib/completion/git-completion.bash | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
@@ -110,6 +110,7 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +126,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done<<<"$output"
The $output variable is not declared as local and therefore it leaks
into the environment. But instead of declaring it local, why not
eliminate it altogether, and use the "$(git config ....)" command
substitution as here string?
Gábor
From: Jonas Berlin <hidden> Date: 2016-06-15 22:52:20
On Thu, 27 Oct 2011 11:05:30 +0200
SZEDER Gábor [off-list ref] wrote:
On Wed, Oct 26, 2011 at 09:13:09PM +0200, Stefan Naewe wrote:
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 'here string'.
Signed-off-by: Stefan Naewe <redacted>
---
contrib/completion/git-completion.bash | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
@@ -110,6 +110,7 @@ __git_ps1_show_upstream ()localupstream=gitlegacy=""verbose=""# get some config options from git-config+output="$(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')"whilereadkeyvalue;docase"$key"inbash.showupstream)
@@ -125,7 +126,7 @@ __git_ps1_show_upstream ()upstream=svn+git# default upstream is SVN if available, else git;;esac-done<<(gitconfig-z--get-regexp'^(svn-remote\..*\.url|bash\.showupstream)$'2>/dev/null|tr'\0\n''\n ')+done<<<"$output"
The $output variable is not declared as local and therefore it leaks
into the environment. But instead of declaring it local, why not
eliminate it altogether, and use the "$(git config ....)" command
substitution as here string?
Wouldn't this work:
git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ' | \
while read key value; do
...
done
- xkr47
From: Jonas Berlin <hidden> Date: 2016-06-15 22:52:20
On Thu, 27 Oct 2011 13:27:54 +0300
Jonas Berlin [off-list ref] wrote:
On Thu, 27 Oct 2011 11:05:30 +0200
SZEDER Gábor [off-list ref] wrote:
quoted
The $output variable is not declared as local and therefore it leaks
into the environment. But instead of declaring it local, why not
eliminate it altogether, and use the "$(git config ....)" command
substitution as here string?
Wouldn't this work:
git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ' | \
while read key value; do
...
done
Sorry, please disregard, I didn't notice it was already dismissed in v1 of the PATCH..
- xkr47