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