From: Junio C Hamano Date: Thu, 25 Apr 2013 14:57:16 GMT Subject: Re: [PATCH] git-remote-testgit: avoid process substitution Message-ID: <7vehdy7j5f.fsf@alter.siamese.dyndns.org> In-Reply-To: <5178C583.6000703@viscovery.net> Johannes Sixt writes: > From: Johannes Sixt > > Bash on Windows does not implement process substitution. > > Signed-off-by: Johannes Sixt > --- > ... > Here is a fix. It assumes that the list of refs after the import is > a superset of the refs before the import. (Can refs be deleted > via fast-import?) > > git-remote-testgit | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/git-remote-testgit b/git-remote-testgit > index 23c9d40..e99d5fa 100755 > --- a/git-remote-testgit > +++ b/git-remote-testgit > @@ -91,13 +91,15 @@ do > > git fast-import "${testgitmarks_args[@]}" --quiet > > - after=$(git for-each-ref --format='%(refname) %(objectname)') > - > # figure out which refs were updated > - join -e 0 -o '0 1.2 2.2' -a 2 <(echo "$before") <(echo "$after") | > - while read ref a b > + git for-each-ref --format='%(refname) %(objectname)' | > + while read ref a > do > - test $a == $b && continue > + case "$before" in > + *"$ref $a"*) > + continue This just like the original 'join' depends on the two output from for-each-ref to be sorted the same way, which is true and fine. But I wonder one thing. When $before has this in it: refs/heads/refs/heads/master 664059...126eaa7 and your "read ref a" got this in the input: refs/heads/master 664059...126eaa7 would the pattern matching by case work corretly? Doing something like this might be needed. case "$LF$before$LF" in *"$LF$ref $a$LF"*) continue ;; # matches esac