All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Sixt <j6t@kdbg.org>
To: Stefan Naewe <stefan.naewe@gmail.com>
Cc: spearce@spearce.org, git@vger.kernel.org, gitster@pobox.com
Subject: Re: [PATCH] completion: fix issue with process substitution not working on Git for Windows
Date: Tue, 25 Oct 2011 22:39:40 +0200	[thread overview]
Message-ID: <4EA71E8C.8010704@kdbg.org> (raw)
In-Reply-To: <1319565695-5976-1-git-send-email-stefan.naewe@gmail.com>

Am 25.10.2011 20:01, schrieb Stefan Naewe:
> 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 <stefan.naewe@gmail.com>
> ---
>  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}; 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

  reply	other threads:[~2011-10-25 20:40 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-25 18:01 [PATCH] completion: fix issue with process substitution not working on Git for Windows Stefan Naewe
2011-10-25 20:39 ` Johannes Sixt [this message]
2011-10-26  6:52   ` Stefan Näwe
2011-10-26 19:13     ` [PATCH v2] " Stefan Naewe
2011-10-26 20:02       ` Junio C Hamano
2011-10-26 21:07       ` Junio C Hamano
2011-10-27  6:26         ` Stefan Näwe
2011-10-27  9:05       ` SZEDER Gábor
2011-10-27 10:27         ` Jonas Berlin
2011-10-27 10:40           ` Jonas Berlin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EA71E8C.8010704@kdbg.org \
    --to=j6t@kdbg.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=spearce@spearce.org \
    --cc=stefan.naewe@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.