X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=tg-export.sh;h=b367aaffcdf43630a6a9bb016c3818909b9f213e;hb=99df827e21e8c36214b57c3d4cd7c16453c3439f;hp=90a76d50fb7e35ed0048cc64a83b780d53727588;hpb=c4c57a55aa1b825109f0ce0547994ad394812902;p=topgit.git diff --git a/tg-export.sh b/tg-export.sh index 90a76d5..b367aaf 100644 --- a/tg-export.sh +++ b/tg-export.sh @@ -7,6 +7,7 @@ name= branches= output= driver=collapse +flatten=false ## Parse options @@ -16,6 +17,8 @@ while [ -n "$1" ]; do case "$arg" in -b) branches="$1"; shift;; + --flatten) + flatten=true;; --quilt) driver=quilt;; --collapse) @@ -34,6 +37,9 @@ done [ -z "$branches" -o "$driver" = "quilt" ] || die "-b works only with the quilt driver" +[ "$driver" = "quilt" ] || ! "$flatten" || + die "--flatten works only with the quilt driver" + if [ -z "$branches" ]; then # this check is only needed when no branches have been passed name="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')" @@ -91,9 +97,13 @@ collapsed_commit() $(for p in $parent; do echo -p $p; done))" fi - (printf '%s\n\n' "$SUBJECT"; cat "$playground/^msg") | - git stripspace | - git commit-tree "$(pretty_tree "$name")" -p "$parent" + if branch_empty "$name"; then + echo "$parent"; + else + (printf '%s\n\n' "$SUBJECT"; cat "$playground/^msg") | + git stripspace | + git commit-tree "$(pretty_tree "$name")" -p "$parent" + fi; echo "$name" >>"$playground/^ticker" } @@ -134,16 +144,31 @@ quilt() return fi - filename="$output/$_dep.diff" + if "$flatten"; then + bn="$(echo "$_dep.diff" | sed -e 's#_#__#g' -e 's#/#_#g')"; + dn=""; + else + bn="$(basename "$_dep.diff")"; + dn="$(dirname "$_dep.diff")/"; + if [ "x$dn" = "x./" ]; then + dn=""; + fi; + fi; + + filename="$output/$dn$bn"; if [ -e "$filename" ]; then # We've already seen this dep return fi - echo "Exporting $_dep" - mkdir -p "$(dirname "$filename")" - $tg patch "$_dep" >"$filename" - echo "$_dep.diff -p1" >>"$output/series" + if branch_empty "$_dep"; then + echo "Skip empty patch $_dep"; + else + echo "Exporting $_dep" + mkdir -p "$output/$dn"; + $tg patch "$_dep" >"$filename" + echo "$dn$bn -p1" >>"$output/series" + fi }