summaryrefslogtreecommitdiff
path: root/tests/tartree-edit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tartree-edit')
-rwxr-xr-xtests/tartree-edit78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/tartree-edit b/tests/tartree-edit
new file mode 100755
index 0000000..2e0c017
--- /dev/null
+++ b/tests/tartree-edit
@@ -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