chiark / gitweb /
tg export (collapse): implement skipping empty patches
[topgit.git] / tg-export.sh
index a7c459a17f37c14696edfba30e121ce3ca10996e..95aa346ef014af079c40ff8b397d5bee7e1ffa01 100644 (file)
@@ -21,7 +21,7 @@ while [ -n "$1" ]; do
        --collapse)
                driver=collapse;;
        -*)
-               echo "Usage: tg [...] export [-b BRANCH1,BRANCH2...] ([--collapse] NEWBRANCH | --quilt DIRECTORY)" >&2
+               echo "Usage: tg [...] export ([--collapse] NEWBRANCH | [-b BRANCH1,BRANCH2...] --quilt DIRECTORY)" >&2
                exit 1;;
        *)
                [ -z "$output" ] || die "output already specified ($output)"
@@ -30,13 +30,17 @@ while [ -n "$1" ]; do
 done
 
 
-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"
 
 [ -z "$branches" -o "$driver" = "quilt" ] ||
        die "-b 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/##')"
+       base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" ||
+               die "not on a TopGit-controlled branch"
+fi
+
 
 playground="$(mktemp -d -t tg-export.XXXXXX)"
 trap 'rm -rf "$playground"' EXIT
@@ -87,9 +91,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"
 }
@@ -136,10 +144,14 @@ quilt()
                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 "$(dirname "$filename")"
+               $tg patch "$_dep" >"$filename"
+               echo "$_dep.diff -p1" >>"$output/series"
+       fi
 }
 
 
@@ -195,3 +207,5 @@ elif [ "$driver" = "quilt" ]; then
        depcount="$(cat "$output/series" | wc -l)"
        echo "Exported topic branch $name (total $depcount topics) to directory $output"
 fi
+
+# vim:noet