Re: [PATCH] git-remote-testgit: avoid process substitution
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 25, 2013, 14:57 UTC
- Message-ID
- <7vehdy7j5f.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <5178C583.6000703@viscovery.net>
Johannes Sixt <j.sixt@viscovery.net> writes:
Show 34 quoted lines
> From: Johannes Sixt <j6t@kdbg.org>
>
> Bash on Windows does not implement process substitution.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
> ...
> 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"*)
> + continueThis 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