X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topgit.git;a=blobdiff_plain;f=tg-export.sh;h=d68a6acd6d7286fabb1e59fde256dea29283d0f1;hp=5b7794c2470e0b5badbcbd1af55f5c6eb347ae9f;hb=120b1ea119b87b3ea292f0c2e2416540e790fcd1;hpb=d145a7b8809dda570027e3b0371fe8a2a97733af diff --git a/tg-export.sh b/tg-export.sh index 5b7794c..d68a6ac 100644 --- a/tg-export.sh +++ b/tg-export.sh @@ -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" + branches="$name" +else + name="${branches##*,}" # the last of the comma-separated items 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 -# 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" @@ -100,7 +95,7 @@ create_tg_commit() # Produce a collapsed commit of branch NAME. collapsed_commit() { - name="$1" + local name; name="$1" 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" - } | 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 @@ -185,8 +180,8 @@ quilt() 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; @@ -228,7 +223,7 @@ linearize() 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; @@ -281,17 +276,10 @@ driver() # 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) -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")" ""