chiark / gitweb /
tests: rename tartree-edit from gitrepo-edit
[dgit.git] / tests / tartree-edit
diff --git a/tests/tartree-edit b/tests/tartree-edit
new file mode 100755 (executable)
index 0000000..2e0c017
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/sh
+set -e
+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"  ;;
+esac
+
+case "$arg" in
+*.tar)         base=${arg%.tar}                        ;;
+*.edit)                base=${arg%.edit}                       ;;
+*)             base=${arg}                             ;;
+esac
+
+tryat_pre () {
+       local b="$1"
+       rm -rf "$b.tmp"
+       if test -f "$b.tar" && test -f "$b.edit"; then
+               echo "$b.edit exists, deleting possibly-obsolete $b.tar"
+               rm "$b.tar"
+       fi
+}
+
+tryat_edit () {
+       local b="$1"
+       if test -d "$b.edit"; then
+               echo "$b.edit already exists"
+               exit 0
+       fi
+       if test -f "$b.tar"; then
+               mkdir "$b.tmp"
+               (set -e; cd "$b.tmp"; tar xf "$b.tar")
+               mv "$b.tmp" "$b.edit"
+               rm "$b.tar"
+               echo "$b.edit ready"
+               exit 0
+       fi
+}
+
+tryat_done () {
+       local b="$1"
+       if test -d "$b.edit"; then
+               (set -e; cd "$b.edit"; tar cf "$b.tmp" *)
+               mv "$b.tmp" "$b.tar"
+               mv "$b.edit" "$b.tmp"
+               rm -rf "$b.tmp"
+               echo "$b.tar regenerated"
+               exit 0
+       fi
+       if test -f "$b.tar"; then
+               echo "$b.tar already exists and $b.edit doesn't"
+               exit 0
+       fi
+}
+
+tryat () {
+       local b="$1"
+       if ! test -f "$b.tar" && ! test -d "$b.edit"; then
+               return
+       fi
+       tryat_pre "$b"
+       tryat_$mode "$b"
+       fail "unexpected situation in $b.*"
+}
+
+case "$arg" in
+/*)            tryat "$base"
+               ;;
+*)
+               pwd=`pwd`
+               tryat "$pwd/$base"
+               tryat "$pwd/git-srcs/$base"
+               tryat "$pwd/tests/git-srcs/$base"
+               fail "could not find $base..."
+               ;;
+esac