[PATCH] Omit patches that have already been merged from format-patch output.
authorJunio C Hamano <junkio@cox.net>
Sun, 11 Sep 2005 18:35:20 +0000 (11:35 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 13 Sep 2005 02:15:02 +0000 (19:15 -0700)
This switches the logic to pick which commits to include in the output
from git-rev-list to git-cherry; as a side effect, 'format-patch ^up mine'
would stop working although up..mine would continue to work.

Signed-off-by: Junio C Hamano <junkio@cox.net>
git-format-patch.sh

index cfba1deb259712cd471af1e0af1adec2c42c067d..525a2f22126cfead751c30310ffe2b2fd971fdae 100755 (executable)
@@ -27,8 +27,6 @@ with applymbox.
 }
 
 diff_opts=
-IFS='
-'
 LF='
 '
 
@@ -61,7 +59,10 @@ do
     --output-directo|--output-director|--output-directory)
     case "$#" in 1) usage ;; esac; shift
     outdir="$1" ;;
-    -*)        diff_opts="$diff_opts$LF$1" ;;
+    -*' '* | -*"$LF"* | -*'    '*)
+       # Ignore diff option that has whitespace for now.
+       ;;
+    -*)        diff_opts="$diff_opts$1 " ;;
     *) break ;;
     esac
     shift
@@ -72,16 +73,20 @@ tt)
        die '--keep-subject and --numbered are incompatible.' ;;
 esac
 
-revpair=
+rev1= rev2=
 case "$#" in
 2)
-    revpair="$1..$2" ;;
+    rev1="$1" rev2="$2" ;;
 1)
     case "$1" in
     *..*)
-       revpair="$1";;
+       rev1=`expr "$1" : '\(.*\)\.\.'`
+       rev2=`expr "$1" : '.*\.\.\(.*\)'`
+       ;;
     *)
-       revpair="$1..HEAD";;
+        rev1="$1"
+       rev2="HEAD"
+       ;;
     esac ;;
 *)
     usage ;;
@@ -127,10 +132,21 @@ _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
 stripCommitHead='/^'"$_x40"' (from '"$_x40"')$/d'
 
-git-rev-list --no-merges --merge-order \
-       $(git-rev-parse --revs-only "$revpair") >$series
+git-cherry -v "$rev1" "$rev2" |
+while read sign rev comment
+do
+       case "$sign" in
+       '-')
+               echo >&2 "Merged already: $comment"
+               ;;
+       *)
+               echo $rev
+               ;;
+       esac
+done >$series
+
 total=`wc -l <$series | tr -dc "[0-9]"`
-i=$total
+i=1
 while read commit
 do
     git-cat-file commit "$commit" | git-stripspace >$commsg
@@ -145,7 +161,7 @@ do
     esac
 
     file=`printf '%04d-%stxt' $i "$title"`
-    i=`expr "$i" - 1`
+    i=`expr "$i" + 1`
     echo "* $file"
     {
        mailScript='