Re: Re* [PATCH] git-remote-testgit: avoid process substitution
From: Johannes Sixt <hidden>
Date: 2016-06-15 22:57:02
Subsystem:
the rest · Maintainer:
Linus Torvalds
Possibly related (same subject, not in this thread)
- 2016-06-15 · Re: Re* [PATCH] git-remote-testgit: avoid process substitution · Junio C Hamano <hidden>
Am 27.04.2013 01:26, schrieb Junio C Hamano:
Felipe Contreras [off-list ref] writes:quoted
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 [ref] and we can take half the log message from there);
The patch below doesn't remove the bash dependency, yet, but it addresses the problematic mismatch you noticed without the need for $LF. Can you please queue it to move the topic forward? Removing the remaining bashisms and the following two can come later:
- 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
Here's my Signed-off-by: Johannes Sixt <redacted> for this part in case someone wants to pick it up:
quoted hunk ↗ jump to hunk
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 + git fast-import \ + ${testgitmarks:+"--import-marks=$testgitmarks"} \ + ${testgitmarks:+"--export-marks=$testgitmarks"} \ + --quiet
--- 8< ---Subject: [PATCH] git-remote-testgit: avoid process substitution The implementation of bash on Windows does not offer process substitution. Signed-off-by: Johannes Sixt <redacted> --- git-remote-testgit | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/git-remote-testgit b/git-remote-testgit
index 23c9d40..979b13e 100755
--- a/git-remote-testgit
+++ b/git-remote-testgit@@ -87,17 +87,18 @@ do exit 1 fi - before=$(git for-each-ref --format='%(refname) %(objectname)') + before=$(git for-each-ref --format=' %(refname) %(objectname) ') 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 ;; # unchanged + esac echo "ok $ref" done
--
1.8.2.388.g36592d7