X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=inline;f=tg-export.sh;h=9e6940fcff23fc1a6bbd5ded2b9a7bf037ece54c;hb=7d639febf13c030f524d6fa41cdb9c06d0cfc83d;hp=95aa346ef014af079c40ff8b397d5bee7e1ffa01;hpb=7e24a4aafda160b0715436034d5c8bf6f62ad8bd;p=topgit.git diff --git a/tg-export.sh b/tg-export.sh index 95aa346..9e6940f 100644 --- a/tg-export.sh +++ b/tg-export.sh @@ -7,6 +7,8 @@ name= branches= output= driver=collapse +flatten=false +numbered=false ## Parse options @@ -16,6 +18,11 @@ while [ -n "$1" ]; do case "$arg" in -b) branches="$1"; shift;; + --flatten) + flatten=true;; + --numbered) + flatten=true; + numbered=true;; --quilt) driver=quilt;; --collapse) @@ -34,6 +41,12 @@ done [ -z "$branches" -o "$driver" = "quilt" ] || die "-b works only with the quilt driver" +[ "$driver" = "quilt" ] || ! "$numbered" || + die "--numbered 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/##')" @@ -138,19 +151,38 @@ quilt() return fi - filename="$output/$_dep.diff" - if [ -e "$filename" ]; then + 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; + + if [ -e "$playground/$_dep" ]; then # We've already seen this dep return fi + mkdir -p "$playground/$(dirname "$_dep")"; + touch "$playground/$_dep"; + if branch_empty "$_dep"; then echo "Skip empty patch $_dep"; else + if "$numbered"; then + number="$(printf "%04u" $(($(cat "$playground/^number" 2>/dev/null) + 1)))"; + bn="$number-$bn"; + echo "$number" >"$playground/^number"; + fi; + echo "Exporting $_dep" - mkdir -p "$(dirname "$filename")" - $tg patch "$_dep" >"$filename" - echo "$_dep.diff -p1" >>"$output/series" + mkdir -p "$output/$dn"; + $tg patch "$_dep" >"$output/$dn$bn" + echo "$dn$bn -p1" >>"$output/series" fi }