3 fail () { echo >&2 "$0: $*"; exit 1; }
5 play=.git/tartree-edit-work
10 *.edit) fail "bad idea to run gitfetchinfo into a .edit tree!" ;;
17 2.edit|2.done) mode="$1"; arg="$2" ;;
18 3.gitfetchinfo) mode="$1"; arg="$2"; remote="$3" ;;
19 ?.-*) fail "no options understood" ;;
21 tartree-edit edit|done DIRECTORY|TARBALL
22 tartree-edit gitfetchinfo DIRECTORY|TARBALL REMOTE" ;;
26 *.tar) base=${arg%.tar} ;;
27 *.edit) base=${arg%.edit} ;;
34 if test -f "$b.tar" && test -f "$b.edit"; then
35 echo "$b.edit exists, deleting possibly-obsolete $b.tar"
42 if test -d "$b.edit"; then
43 echo "$b.edit already exists"
46 if test -f "$b.tar"; then
48 (set -e; cd "$b.tmp"; tar xf "$b.tar")
56 gitfetchinfo_perhaps_commit () {
59 git diff --cached --quiet --exit-code HEAD
64 1) git commit --allow-empty --author='tartree-edit <>' -m "$m" ;;
65 *) fail "git diff failed ($rc)" ;;
69 tryat_gitfetchinfo () {
71 if test -d "$b.edit"; then
72 cp -a "$b.edit"/. "$play"/.
75 tar -C $play -f - <&3 -x
79 git remote remove "$remote" 2>/dev/null ||:
80 git remote add "$remote" $innerwd
81 git fetch --no-tags -p "$remote" \
82 +"HEAD:refs/remotes/$remote/HEAD"
84 git checkout -b WORKTREE
85 gitfetchinfo_perhaps_commit INDEX
87 gitfetchinfo_perhaps_commit WORKTREE
89 git fetch --no-tags "$remote" --refmap \
90 +"refs/*:refs/remotes/$remote/*" \
91 +"refs/*:refs/remotes/$remote/*"
97 if test -d "$b.edit"; then
98 (set -e; cd "$b.edit"; tar cf "$b.tmp" *)
100 mv "$b.edit" "$b.tmp"
102 echo "$b.tar regenerated"
105 if test -f "$b.tar"; then
106 echo "$b.tar already exists and $b.edit doesn't"
113 if ! test -f "$b.tar" && ! test -d "$b.edit"; then
118 fail "unexpected situation in $b.*"
127 tryat "$pwd/git-srcs/$base"
128 tryat "$pwd/tests/git-srcs/$base"
129 fail "could not find $base..."