summaryrefslogtreecommitdiff
path: root/tests/gitrepo-edit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2014-02-12 18:35:44 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2014-03-05 18:29:06 +0000
commit62c2e5bde449901e1963adb288b4c31b46db3776 (patch)
tree5807b5adbc2291696627b4af13fa5f6af6148550 /tests/gitrepo-edit
parentb19d59fb104f8f260a139c838fc08a0158431415 (diff)
tests: git-repo-edit: wip
Diffstat (limited to 'tests/gitrepo-edit')
-rwxr-xr-xtests/gitrepo-edit85
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/gitrepo-edit b/tests/gitrepo-edit
new file mode 100755
index 0000000..97bbd2c
--- /dev/null
+++ b/tests/gitrepo-edit
@@ -0,0 +1,85 @@
+#!/bin/sh
+set -e
+fail () { echo >&2 "$0: $*"; exit 1; }
+
+case "$1" in
+edit|done) mode=$1
+fi
+
+case "$*.$1" in
+1.-*) fail "no options understood" ;;
+1.*) arg="$1"; shift ;;
+*) fail "need one arg" ;;
+esac
+
+case "$arg" in
+*.git.tar) base=${arg%.tar} ;;
+*.git) base=${arg} ;;
+*) fail "arg must end in .git[.tar]" ;;
+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" "$b.edit"
+ rm "$b.tar"
+ rm -rf "$b.tmp"
+ echo "$b.edit ready"
+ exit 0
+ fi
+}
+
+tryat_done () {
+ local b="$1"
+ if test -d "$b.edit"; then
+ mkdir "$b.tmp"
+ cp -al "$b.edit" "$b.tmp/$b"
+ (set -e; cd "$b.tmp"; tar cf "$b.tmp/tar")
+ mv "$b.tmp/tar" "$b.tar"
+ rm -rf "$b.tmp"
+ 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 -f "$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"
+ ;;
+esac