chiark / gitweb /
Merge branch 'i/build' into refs/top-bases/i/basis-merge
[topgit.git] / tg-export.sh
index 5b7794c2470e0b5badbcbd1af55f5c6eb347ae9f..d68a6acd6d7286fabb1e59fde256dea29283d0f1 100644 (file)
@@ -54,25 +54,20 @@ if [ -z "$branches" ]; then
        name="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
        base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" ||
                die "not on a TopGit-controlled branch"
        name="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
        base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" ||
                die "not on a TopGit-controlled branch"
+       branches="$name"
+else
+       name="${branches##*,}" # the last of the comma-separated items
 fi
 fi
+# $name holds the current branch
+# $branches holds the comma-separated list of branches
+# $name is equal to the last of the list of branches
 
 
 
 
-playground="$(mktemp -d -t tg-export.XXXXXX)"
-trap 'rm -rf "$playground"' EXIT
+playground="$(get_temp tg-export -d)"
 
 
 ## Collapse driver
 
 
 
 ## Collapse driver
 
-# pretty_tree NAME
-# Output tree ID of a cleaned-up tree without tg's artifacts.
-pretty_tree()
-{
-       (export GIT_INDEX_FILE="$playground/^index"
-        git read-tree "$1"
-        git update-index --force-remove ".topmsg" ".topdeps"
-        git write-tree)
-}
-
 create_tg_commit()
 {
        name="$1"
 create_tg_commit()
 {
        name="$1"
@@ -100,7 +95,7 @@ create_tg_commit()
 # Produce a collapsed commit of branch NAME.
 collapsed_commit()
 {
 # Produce a collapsed commit of branch NAME.
 collapsed_commit()
 {
-       name="$1"
+       local name; name="$1"
 
        rm -f "$playground/^pre" "$playground/^post"
        >"$playground/^body"
 
        rm -f "$playground/^pre" "$playground/^post"
        >"$playground/^body"
@@ -113,7 +108,7 @@ collapsed_commit()
                        echo "TopGit-driven merge of branches:"
                        echo
                        cut -f 2 "$playground/$name^parents"
                        echo "TopGit-driven merge of branches:"
                        echo
                        cut -f 2 "$playground/$name^parents"
-               } | git commit-tree "$(pretty_tree "refs/top-bases/$name")" \
+               } | git commit-tree "$(pretty_tree "$name" -b)" \
                        $(for p in $parent; do echo -p $p; done))"
        fi
 
                        $(for p in $parent; do echo -p $p; done))"
        fi
 
@@ -185,8 +180,8 @@ quilt()
                echo "Skip empty patch $_dep";
        else
                if "$numbered"; then
                echo "Skip empty patch $_dep";
        else
                if "$numbered"; then
-                       number="$(printf "%04u" $(($(cat "$playground/^number" 2>/dev/null) + 1)))";
-                       bn="$number-$bn";
+                       number="$(echo $(($(cat "$playground/^number" 2>/dev/null) + 1)))";
+                       bn="$(printf "%04u-$bn" $number)";
                        echo "$number" >"$playground/^number";
                fi;
 
                        echo "$number" >"$playground/^number";
                fi;
 
@@ -228,7 +223,7 @@ linearize()
        else
                retmerge=0;
 
        else
                retmerge=0;
 
-               git merge-recursive "$(pretty_tree "refs/top-bases/$_dep")" -- HEAD "$(pretty_tree "refs/heads/$_dep")" || retmerge="$?";
+               git merge-recursive "$(pretty_tree "$_dep" -b)" -- HEAD "$(pretty_tree "refs/heads/$_dep")" || retmerge="$?";
 
                if test "x$retmerge" != "x0"; then
                        git rerere;
 
                if test "x$retmerge" != "x0"; then
                        git rerere;
@@ -281,17 +276,10 @@ driver()
 
 # Call driver on all the branches - this will happen
 # in topological order.
 
 # Call driver on all the branches - this will happen
 # in topological order.
-if [ -z "$branches" ]; then
+echo "$branches" | tr , '\n' | while read name; do
        recurse_deps driver "$name"
        (_ret=0; _dep="$name"; _name=""; _dep_is_tgish=1; driver)
        recurse_deps driver "$name"
        (_ret=0; _dep="$name"; _name=""; _dep_is_tgish=1; driver)
-else
-       echo "$branches" | tr ',' '\n' | while read _dep; do
-               _dep_is_tgish=1
-               $driver
-       done
-       name="$(echo "$branches" | sed 's/.*,//')"
-fi
-
+done
 
 if [ "$driver" = "collapse" ]; then
        git update-ref "refs/heads/$output" "$(cat "$playground/$name")" ""
 
 if [ "$driver" = "collapse" ]; then
        git update-ref "refs/heads/$output" "$(cat "$playground/$name")" ""