Merge branch 'js/transport-helper-error-reporting-fix'
authorJunio C Hamano <gitster@pobox.com>
Wed, 29 May 2013 21:20:25 +0000 (14:20 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 May 2013 21:20:25 +0000 (14:20 -0700)
Finishing touches to fc/transport-helper-error-reporting topic.

* js/transport-helper-error-reporting-fix:
git-remote-testgit: build it to run under $SHELL_PATH
git-remote-testgit: further remove some bashisms
git-remote-testgit: avoid process substitution

.gitignore
Makefile
git-remote-testgit [deleted file]
git-remote-testgit.sh [new file with mode: 0755]
t/t5801-remote-helpers.sh
index 6669bf0c6c9a0b42f74e2ed189350a6a9f11f17d..10aee94760bca452935ac5c0dfc337a0f6b58a30 100644 (file)
 /git-remote-ftps
 /git-remote-fd
 /git-remote-ext
+/git-remote-testgit
 /git-remote-testpy
 /git-remote-testsvn
 /git-repack
index 0f931a203002aec397f8b454f93df9aee97a21ad..5f424a7e19fee0df2ef90dd5e8dea0c7f42cf0b1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -460,6 +460,7 @@ SCRIPT_SH += git-mergetool.sh
 SCRIPT_SH += git-pull.sh
 SCRIPT_SH += git-quiltimport.sh
 SCRIPT_SH += git-rebase.sh
+SCRIPT_SH += git-remote-testgit.sh
 SCRIPT_SH += git-repack.sh
 SCRIPT_SH += git-request-pull.sh
 SCRIPT_SH += git-stash.sh
diff --git a/git-remote-testgit b/git-remote-testgit
deleted file mode 100755 (executable)
index 2b865de..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2012 Felipe Contreras
-
-alias=$1
-url=$2
-
-dir="$GIT_DIR/testgit/$alias"
-prefix="refs/testgit/$alias"
-
-default_refspec="refs/heads/*:${prefix}/heads/*"
-
-refspec="${GIT_REMOTE_TESTGIT_REFSPEC-$default_refspec}"
-
-test -z "$refspec" && prefix="refs"
-
-export GIT_DIR="$url/.git"
-
-mkdir -p "$dir"
-
-if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
-then
-       gitmarks="$dir/git.marks"
-       testgitmarks="$dir/testgit.marks"
-       test -e "$gitmarks" || >"$gitmarks"
-       test -e "$testgitmarks" || >"$testgitmarks"
-       testgitmarks_args=( "--"{import,export}"-marks=$testgitmarks" )
-fi
-
-while read line
-do
-       case $line in
-       capabilities)
-               echo 'import'
-               echo 'export'
-               test -n "$refspec" && echo "refspec $refspec"
-               if test -n "$gitmarks"
-               then
-                       echo "*import-marks $gitmarks"
-                       echo "*export-marks $gitmarks"
-               fi
-               test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
-               echo
-               ;;
-       list)
-               git for-each-ref --format='? %(refname)' 'refs/heads/'
-               head=$(git symbolic-ref HEAD)
-               echo "@$head HEAD"
-               echo
-               ;;
-       import*)
-               # read all import lines
-               while true
-               do
-                       ref="${line#* }"
-                       refs="$refs $ref"
-                       read line
-                       test "${line%% *}" != "import" && break
-               done
-
-               if test -n "$gitmarks"
-               then
-                       echo "feature import-marks=$gitmarks"
-                       echo "feature export-marks=$gitmarks"
-               fi
-
-               if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
-               then
-                       echo "feature done"
-                       exit 1
-               fi
-
-               echo "feature done"
-               git fast-export "${testgitmarks_args[@]}" $refs |
-               sed -e "s#refs/heads/#${prefix}/heads/#g"
-               echo "done"
-               ;;
-       export)
-               if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
-               then
-                       # consume input so fast-export doesn't get SIGPIPE;
-                       # git would also notice that case, but we want
-                       # to make sure we are exercising the later
-                       # error checks
-                       while read line; do
-                               test "done" = "$line" && break
-                       done
-                       exit 1
-               fi
-
-               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
-               do
-                       test $a == $b && continue
-                       if test -z "$GIT_REMOTE_TESTGIT_PUSH_ERROR"
-                       then
-                               echo "ok $ref"
-                       else
-                               echo "error $ref $GIT_REMOTE_TESTGIT_PUSH_ERROR"
-                       fi
-               done
-
-               echo
-               ;;
-       '')
-               exit
-               ;;
-       esac
-done
diff --git a/git-remote-testgit.sh b/git-remote-testgit.sh
new file mode 100755 (executable)
index 0000000..2109070
--- /dev/null
@@ -0,0 +1,121 @@
+#!/bin/sh
+# Copyright (c) 2012 Felipe Contreras
+
+alias=$1
+url=$2
+
+dir="$GIT_DIR/testgit/$alias"
+prefix="refs/testgit/$alias"
+
+default_refspec="refs/heads/*:${prefix}/heads/*"
+
+refspec="${GIT_REMOTE_TESTGIT_REFSPEC-$default_refspec}"
+
+test -z "$refspec" && prefix="refs"
+
+export GIT_DIR="$url/.git"
+
+mkdir -p "$dir"
+
+if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
+then
+       gitmarks="$dir/git.marks"
+       testgitmarks="$dir/testgit.marks"
+       test -e "$gitmarks" || >"$gitmarks"
+       test -e "$testgitmarks" || >"$testgitmarks"
+fi
+
+while read line
+do
+       case $line in
+       capabilities)
+               echo 'import'
+               echo 'export'
+               test -n "$refspec" && echo "refspec $refspec"
+               if test -n "$gitmarks"
+               then
+                       echo "*import-marks $gitmarks"
+                       echo "*export-marks $gitmarks"
+               fi
+               test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
+               echo
+               ;;
+       list)
+               git for-each-ref --format='? %(refname)' 'refs/heads/'
+               head=$(git symbolic-ref HEAD)
+               echo "@$head HEAD"
+               echo
+               ;;
+       import*)
+               # read all import lines
+               while true
+               do
+                       ref="${line#* }"
+                       refs="$refs $ref"
+                       read line
+                       test "${line%% *}" != "import" && break
+               done
+
+               if test -n "$gitmarks"
+               then
+                       echo "feature import-marks=$gitmarks"
+                       echo "feature export-marks=$gitmarks"
+               fi
+
+               if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
+               then
+                       echo "feature done"
+                       exit 1
+               fi
+
+               echo "feature done"
+               git fast-export \
+                       ${testgitmarks:+"--import-marks=$testgitmarks"} \
+                       ${testgitmarks:+"--export-marks=$testgitmarks"} \
+                       $refs |
+               sed -e "s#refs/heads/#${prefix}/heads/#g"
+               echo "done"
+               ;;
+       export)
+               if test -n "$GIT_REMOTE_TESTGIT_FAILURE"
+               then
+                       # consume input so fast-export doesn't get SIGPIPE;
+                       # git would also notice that case, but we want
+                       # to make sure we are exercising the later
+                       # error checks
+                       while read line; do
+                               test "done" = "$line" && break
+                       done
+                       exit 1
+               fi
+
+               before=$(git for-each-ref --format=' %(refname) %(objectname) ')
+
+               git fast-import \
+                       ${testgitmarks:+"--import-marks=$testgitmarks"} \
+                       ${testgitmarks:+"--export-marks=$testgitmarks"} \
+                       --quiet
+
+               # figure out which refs were updated
+               git for-each-ref --format='%(refname) %(objectname)' |
+               while read ref a
+               do
+                       case "$before" in
+                       *" $ref $a "*)
+                               continue ;;     # unchanged
+                       esac
+                       if test -z "$GIT_REMOTE_TESTGIT_PUSH_ERROR"
+                       then
+                               echo "ok $ref"
+                       else
+                               echo "error $ref $GIT_REMOTE_TESTGIT_PUSH_ERROR"
+                       fi
+               done
+
+               echo
+               ;;
+       '')
+               exit
+               ;;
+       esac
+done
index 16faa23154a7711ac7408d4a6df64e1623c28bcb..4899af3f7abfb567017e0d64c7961c22beb5b749 100755 (executable)
@@ -8,11 +8,6 @@ test_description='Test remote-helper import and export commands'
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-gpg.sh
 
-if ! type "${BASH-bash}" >/dev/null 2>&1; then
-       skip_all='skipping remote-testgit tests, bash not available'
-       test_done
-fi
-
 compare_refs() {
        git --git-dir="$1/.git" rev-parse --verify $2 >expect &&
        git --git-dir="$3/.git" rev-parse --verify $4 >actual &&