chiark / gitweb /
tests: git-repo-edit: wip
[dgit.git] / tests / gitrepo-edit
1 #!/bin/sh
2 set -e
3 fail () { echo >&2 "$0: $*"; exit 1; }
4
5 case "$1" in
6 edit|done) mode=$1
7 fi
8
9 case "$*.$1" in
10 1.-*)   fail "no options understood"            ;;
11 1.*)    arg="$1"; shift                         ;;
12 *)      fail "need one arg"                     ;;
13 esac
14
15 case "$arg" in
16 *.git.tar)      base=${arg%.tar}                        ;;
17 *.git)          base=${arg}                             ;;
18 *)              fail "arg must end in .git[.tar]"       ;;
19 esac
20
21 tryat_pre () {
22         local b="$1"
23         rm -rf "$b.tmp"
24         if test -f "$b.tar" && test -f "$b.edit"; then
25                 echo "$b.edit exists, deleting possibly-obsolete $b.tar"
26                 rm "$b.tar"
27         fi
28 }
29
30 tryat_edit () {
31         local b="$1"
32         if test -d "$b.edit"; then
33                 echo "$b.edit already exists"
34                 exit 0
35         fi
36         if test -f "$b.tar"; then
37                 mkdir "$b.tmp"
38                 (set -e; cd "$b.tmp"; tar xf "$b.tar")
39                 mv "$b.tmp/$b" "$b.edit"
40                 rm "$b.tar"
41                 rm -rf "$b.tmp"
42                 echo "$b.edit ready"
43                 exit 0
44         fi
45 }
46
47 tryat_done () {
48         local b="$1"
49         if test -d "$b.edit"; then
50                 mkdir "$b.tmp"
51                 cp -al "$b.edit" "$b.tmp/$b"
52                 (set -e; cd "$b.tmp"; tar cf "$b.tmp/tar")
53                 mv "$b.tmp/tar" "$b.tar"
54                 rm -rf "$b.tmp"
55                 mv "$b.edit" "$b.tmp"
56                 rm -rf "$b.tmp"
57                 echo "$b.tar regenerated"
58                 exit 0
59         fi
60         if test -f "$b.tar"; then
61                 echo "$b.tar already exists and $b.edit doesn't"
62                 exit 0
63         fi
64 }
65
66 tryat () {
67         local b="$1"
68         if ! test -f "$b.tar" && ! test -f "$b.edit"; then
69                 return
70         fi
71         tryat_pre "$b"
72         tryat_$mode "$b"
73         fail "unexpected situation in $b.*"
74 }
75
76 case "$arg" in
77 /*)             tryat "$base"
78                 ;;
79 *)
80                 pwd=`pwd`
81                 tryat "$pwd/$base"
82                 tryat "$pwd/git-srcs/$base"
83                 tryat "$pwd/tests/git-srcs/$base"
84                 ;;
85 esac