Re: [PATCH] git-remote-testgit: avoid process substitution

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] git-remote-testgit: avoid process substitution

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:00

Johannes Sixt [off-list ref] writes:
quoted hunk
From: Johannes Sixt <redacted>

Bash on Windows does not implement process substitution.

Signed-off-by: Johannes Sixt <redacted>
---
...
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

Re: [PATCH] git-remote-testgit: avoid process substitution

From: Felipe Contreras <hidden>
Date: 2016-06-15 22:57:00

On Thu, Apr 25, 2013 at 9:57 AM, Junio C Hamano [off-list ref] wrote:
Johannes Sixt [off-list ref] writes:
quoted
From: Johannes Sixt <redacted>

Bash on Windows does not implement process substitution.

Signed-off-by: Johannes Sixt <redacted>
---
...
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:
I wonder if we should bother with this at all. The purpose of the code
was mainly to show to users that they should report the success only
if the refs have been updated, but the code is becoming more
obfuscated, a comment should do the trick. And then, we can just
report success for all the refs (and explain in the comment why).

-- 
Felipe Contreras
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help