chiark / gitweb /
tg export: Really remove TopGit metadata files when exporting
[topgit.git] / tg.sh
diff --git a/tg.sh b/tg.sh
index 905fccf4e0fa0e5753d95d3cc477434d7f85f53c..16940f8de6d2dde6fdbf3633cb2a436de50b3e20 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -47,8 +47,8 @@ setup_ours()
 {
        if [ ! -s "$git_dir/info/attributes" ] || ! grep -q topmsg "$git_dir/info/attributes"; then
                {
-                       echo -e ".topmsg\tmerge=ours"
-                       echo -e ".topdeps\tmerge=ours"
+                       echo ".topmsg   merge=ours"
+                       echo ".topdeps  merge=ours"
                } >>"$git_dir/info/attributes"
        fi
        if ! git config merge.ours.driver >/dev/null; then
@@ -60,11 +60,11 @@ setup_ours()
 # measure_branch NAME [BASE]
 measure_branch()
 {
-       _name="$1"; _base="$2"
-       [ -n "$_base" ] || _base="refs/top-bases/$_name"
+       _bname="$1"; _base="$2"
+       [ -n "$_base" ] || _base="refs/top-bases/$_bname"
        # The caller should've verified $name is valid
-       _commits="$(git rev-list "$_name" ^"$_base" | wc -l)"
-       _nmcommits="$(git rev-list --no-merges "$_name" ^"$_base" | wc -l)"
+       _commits="$(git rev-list "$_bname" ^"$_base" | wc -l)"
+       _nmcommits="$(git rev-list --no-merges "$_bname" ^"$_base" | wc -l)"
        if [ $_commits -gt 1 ]; then
                _suffix="commits"
        else
@@ -95,8 +95,8 @@ recurse_deps()
        _cmd="$1"; shift
        _name="$1"; # no shift
        _depchain="$*"
-       depsfile="$(mktemp)"
-       git cat-file blob "$_name:.topdeps" >"$depsfile"
+       _depsfile="$(mktemp)"
+       git cat-file blob "$_name:.topdeps" >"$_depsfile"
        _ret=0
        while read _dep; do
                if ! git rev-parse --verify "$_dep" >/dev/null 2>&1; then
@@ -111,13 +111,13 @@ recurse_deps()
 
                # Shoo shoo, keep our environment alone!
                [ -z "$_dep_is_tgish" ] ||
-                       (needs_update "$_cmd" "$_dep" "$@") ||
+                       (recurse_deps "$_cmd" "$_dep" "$@") ||
                        _ret=$?
 
                eval "$_cmd"
-       done <"$depsfile"
+       done <"$_depsfile"
        missing_deps="${missing_deps# }"
-       rm "$depsfile"
+       rm "$_depsfile"
        return $_ret
 }
 
@@ -139,7 +139,7 @@ branch_needs_update()
                # _dep needs to be synced with its base
                echo ": $_dep $_depchain"
                _ret=1
-       elif ! branch_contains "refs/top-bases/$1" "$_dep"; then
+       elif [ -n "$_name" ] && ! branch_contains "refs/top-bases/$_name" "$_dep"; then
                # Some new commits in _dep
                echo "$_dep $_depchain"
                _ret=1