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

1  2 
git-remote-testgit.sh
t/t5801-remote-helpers.sh
index 0000000000000000000000000000000000000000,b5289493e2ca84bbbff58734bcb0abcae2145312..2109070d00411dbd9f1ba70e55587091d50a8a08
mode 000000,100755..100755
--- /dev/null
@@@ -1,0 -1,115 +1,121 @@@
 -                      echo "ok $ref"
+ #!/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,0a83db8875cc221906ce292dd6247a0323ac6348..4899af3f7abfb567017e0d64c7961c22beb5b749
@@@ -6,13 -6,7 +6,8 @@@
  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 &&