diff options
Diffstat (limited to 'tests/tartree-edit')
-rwxr-xr-x | tests/tartree-edit | 78 |
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 |