summaryrefslogtreecommitdiff
path: root/tests/tartree-edit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-02 10:23:01 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-02 10:23:06 +0100
commita9561076491b74351adbf62c153fb22ea79ba255 (patch)
tree27ac1df35ed8c06a7ab7919d3ddb5527bdd8b8ef /tests/tartree-edit
parent037066e366270d6b9f5c630b45205df008bb7327 (diff)
Test suite: Provide `tartree-edit gitfetchinfo'
Help with comparing different test case git working tree tarballs.
Diffstat (limited to 'tests/tartree-edit')
-rwxr-xr-xtests/tartree-edit52
1 files changed, 50 insertions, 2 deletions
diff --git a/tests/tartree-edit b/tests/tartree-edit
index 2e0c017..14eec68 100755
--- a/tests/tartree-edit
+++ b/tests/tartree-edit
@@ -4,8 +4,11 @@ fail () { echo >&2 "$0: $*"; exit 1; }
case "$#.$1" in
2.edit|2.done) mode="$1"; arg="$2" ;;
-2.-*) fail "no options understood" ;;
-*) fail "usage: tartree-edit edit|done DIRECTORY" ;;
+3.gitfetchinfo) mode="$1"; arg="$2"; remote="$3" ;;
+?.-*) fail "no options understood" ;;
+*) fail "usage:
+ tartree-edit edit|done DIRECTORY|TARBALL
+ tartree-edit gitfetchinfo DIRECTORY|TARBALL REMOTE" ;;
esac
case "$arg" in
@@ -39,6 +42,51 @@ tryat_edit () {
fi
}
+gitfetchinfo_perhaps_commit () {
+ local m="$1"
+ set +e
+ git diff --cached --quiet --exit-code HEAD
+ local rc=$?
+ set -e
+ case "$rc" in
+ 0) return ;;
+ 1) git commit --allow-empty --author='tartree-edit <>' -m "$m" ;;
+ *) fail "git diff failed ($rc)" ;;
+ esac
+}
+
+tryat_gitfetchinfo () {
+ local wd=$(pwd)
+ case "$wd" in
+ *.edit) fail "bad idea to run gitfetchinfo into a .edit tree!" ;;
+ esac
+ local play=.git/tartree-edit-work
+ rm -rf $play
+ mkdir $play
+ if test -d "$b.edit"; then
+ cp -a "$b.edit"/. "$play"/.
+ else
+ exec 3<"$b.tar"
+ tar -C $play -f - <&3 -x
+ exec 3<&-
+ fi
+ local innerwd=$play/*
+ git remote remove "$remote" 2>/dev/null ||:
+ git remote add "$remote" $innerwd
+ git fetch --no-tags -p "$remote" \
+ +"HEAD:refs/remotes/$remote/HEAD"
+ cd $innerwd
+ git checkout -b WORKTREE
+ gitfetchinfo_perhaps_commit INDEX
+ git add -Af .
+ gitfetchinfo_perhaps_commit WORKTREE
+ cd ../../..
+ git fetch --no-tags "$remote" --refmap \
+ +"refs/*:refs/remotes/$remote/*" \
+ +"refs/*:refs/remotes/$remote/*"
+ exit 0
+}
+
tryat_done () {
local b="$1"
if test -d "$b.edit"; then