git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 26, 2013, 23:26 UTC
Message-ID
<7v8v44vpon.fsf_-_@alter.siamese.dyndns.org>
In-Reply-To
<CAMP44s3j5Bk3eqPeN2qkGTWFLO2NKz0taTGYVNvEut_VM=0NXA@mail.gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
> No, it wouldn't, but I don't think there's any way to do \<\> or \b in globs.
This should do in the meantime, but it further needs:
 - J6t's sign off for the follow-up part to remove remaining
   bash-isms to complete this patch (the last part of the patch is
   from <5178C583.6000703@viscovery.net> and we can take half the
   log message from there);
 - Rename it to git-remote-testgit.sh and tell Makefile to replace
   the shebang line with SHELL_PATH like other scripts;
 - Remove the "we need to have bash because we will run remote-testgit"
   logic from t5801
diff --git a/git-remote-testgit b/git-remote-testgit
index b395c8d..ffac950 100755
--- a/git-remote-testgit
+++ b/git-remote-testgit
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 # Copyright (c) 2012 Felipe Contreras
 
 alias=$1
@@ -23,7 +23,6 @@ then
 	testgitmarks="$dir/testgit.marks"
 	test -e "$gitmarks" || >"$gitmarks"
 	test -e "$testgitmarks" || >"$testgitmarks"
-	testgitmarks_args=( "--"{import,export}"-marks=$testgitmarks" )
 fi
 
 while read line
@@ -62,22 +61,31 @@ do
 			echo "feature export-marks=$gitmarks"
 		fi
 		echo "feature done"
-		git fast-export "${testgitmarks_args[@]}" $refs |
+		git fast-export \
+			${testgitmarks:+"--import-marks=$testgitmarks"} \
+			${testgitmarks:+"--export-marks=$testgitmarks"} \
+			$refs |
 		sed -e "s#refs/heads/#${prefix}/heads/#g"
 		echo "done"
 		;;
 	export)
 		before=$(git for-each-ref --format='%(refname) %(objectname)')
 
-		git fast-import "${testgitmarks_args[@]}" --quiet
-
-		after=$(git for-each-ref --format='%(refname) %(objectname)')
+		git fast-export \
+			${testgitmarks:+"--import-marks=$testgitmarks"} \
+			${testgitmarks:+"--export-marks=$testgitmarks"} \
+			--quiet
 
 		# 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
+		LF=$'\n'
+		git for-each-ref --format='%(refname) %(objectname)' |
+		while read ref a
 		do
-			test $a == $b && continue
+			case "$LF$before$LF" in
+			*"$LF$ref $a$LF"*)
+				continue
+				;;
+			esac
 			echo "ok $ref"
 		done
 
Previous: Felipe ContrerasNext: Johannes Sixt
Message 16 of 22 in “What's cooking in git.git (Apr 2013, #07; Mon, 22)”
  1. Junio C HamanoApr 22, 2013
  2. What's cooking in git.git (Apr 2013, #08; Tue, 23)Junio C Hamano, Apr 23, 2013
  3. Johannes SixtApr 24, 2013
  4. Felipe ContrerasApr 24, 2013
  5. Johannes SixtApr 24, 2013
  6. git-remote-testgit: avoid process substitutionJohannes Sixt, Apr 25, 2013
  7. Junio C HamanoApr 25, 2013
  8. Felipe ContrerasApr 25, 2013
  9. Junio C HamanoApr 25, 2013
  10. Felipe ContrerasApr 25, 2013
  11. Junio C HamanoApr 25, 2013
  12. Felipe ContrerasApr 25, 2013
  13. Felipe ContrerasApr 26, 2013
  14. Junio C HamanoApr 26, 2013
  15. Felipe ContrerasApr 26, 2013
  16. Re* [PATCH] git-remote-testgit: avoid process substitutionJunio C Hamano, Apr 26, 2013
  17. Johannes SixtApr 27, 2013
  18. Junio C HamanoApr 29, 2013
  19. 0/3 De-bashing remote-testgitJunio C Hamano, Apr 29, 2013
  20. 1/3 git-remote-testgit: avoid process substitutionJunio C Hamano, Apr 29, 2013
  21. 2/3 git-remote-testgit: further remove some bashismsJunio C Hamano, Apr 29, 2013
  22. 3/3 git-remote-testgit: build it to run under $SHELL_PATHJunio C Hamano, Apr 29, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.