git-format-patch should show the correct version
[git.git] / git-format-patch.sh
index 7ee5d32..daa3cae 100755 (executable)
@@ -3,15 +3,8 @@
 # Copyright (c) 2005 Junio C Hamano
 #
 
 # Copyright (c) 2005 Junio C Hamano
 #
 
-. git-sh-setup || die "Not a git archive."
-
-usage () {
-    echo >&2 "usage: $0"' [-n] [-o dir | --stdout] [--keep-subject] [--mbox]
-    [--check] [--signoff] [-<diff options>...]
-    [--help]
-    ( from..to ... | upstream [ our-head ] )
-
-Prepare each commit with its patch since our-head forked from upstream,
+USAGE='[-n | -k] [-o <dir> | --stdout] [--signoff] [--check] [--mbox] [--diff-options] <upstream> [<our-head>]'
+LONG_USAGE='Prepare each commit with its patch since our-head forked from upstream,
 one file per patch, for e-mail submission.  Each output file is
 numbered sequentially from 1, and uses the first line of the commit
 message (massaged for pathname safety) as the filename.
 one file per patch, for e-mail submission.  Each output file is
 numbered sequentially from 1, and uses the first line of the commit
 message (massaged for pathname safety) as the filename.
@@ -24,10 +17,12 @@ as "[PATCH N/M] Subject", unless you have only one patch.
 
 When --mbox is specified, the output is formatted to resemble
 UNIX mailbox format, and can be concatenated together for processing
 
 When --mbox is specified, the output is formatted to resemble
 UNIX mailbox format, and can be concatenated together for processing
-with applymbox.
-'
-    exit 1
-}
+with applymbox.'
+. git-sh-setup
+
+# Force diff to run in C locale.
+LANG=C LC_ALL=C
+export LANG LC_ALL
 
 diff_opts=
 LF='
 
 diff_opts=
 LF='
@@ -99,7 +94,7 @@ filelist=$tmp-files
 # Also, "rev1.." should mean "rev1..HEAD"; git-diff users are
 # familiar with that syntax.
 
 # Also, "rev1.." should mean "rev1..HEAD"; git-diff users are
 # familiar with that syntax.
 
-case "$#,$1" in
+case "$#,$1$2" in
 1,?*..?*)
        # single "rev1..rev2"
        ;;
 1,?*..?*)
        # single "rev1..rev2"
        ;;
@@ -131,7 +126,8 @@ do
                rev2=`expr "$revpair" : '.*\.\.\(.*\)'`
                ;;
        *)
                rev2=`expr "$revpair" : '.*\.\.\(.*\)'`
                ;;
        *)
-               usage
+               rev1="$revpair^"
+               rev2="$revpair"
                ;;
        esac
        git-rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
                ;;
        esac
        git-rev-parse --verify "$rev1^0" >/dev/null 2>&1 ||
@@ -201,7 +197,7 @@ process_one () {
            ;;
        esac
 
            ;;
        esac
 
-       eval "$(LANG=C LC_ALL=C sed -ne "$whosepatchScript" $commsg)"
+       eval "$(sed -ne "$whosepatchScript" $commsg)"
        test "$author,$au" = ",$me" || {
                mailScript="$mailScript"'
        a\
        test "$author,$au" = ",$me" || {
                mailScript="$mailScript"'
        a\
@@ -214,6 +210,8 @@ Date: '"$ad"
        }
 
        mailScript="$mailScript"'
        }
 
        mailScript="$mailScript"'
+       a\
+
        : body
        p
        n
        : body
        p
        n
@@ -237,9 +235,8 @@ Date: '"$ad"
        echo
        git-diff-tree -p $diff_opts "$commit" | git-apply --stat --summary
        echo
        echo
        git-diff-tree -p $diff_opts "$commit" | git-apply --stat --summary
        echo
-       git-cat-file commit "$commit^" | sed -e 's/^tree /applies-to: /' -e q
        git-diff-tree -p $diff_opts "$commit"
        git-diff-tree -p $diff_opts "$commit"
-       echo "---"
+       echo "-- "
        echo "@@GIT_VERSION@@"
 
        case "$mbox" in
        echo "@@GIT_VERSION@@"
 
        case "$mbox" in
@@ -250,6 +247,15 @@ Date: '"$ad"
 }
 
 total=`wc -l <$series | tr -dc "[0-9]"`
 }
 
 total=`wc -l <$series | tr -dc "[0-9]"`
+case "$total,$numbered" in
+1,*)
+       numfmt='' ;;
+*,t)
+       numfmt=`echo "$total" | wc -c`
+       numfmt=$(($numfmt-1))
+       numfmt=" %0${numfmt}d/$total"
+esac
+
 i=1
 while read commit
 do
 i=1
 while read commit
 do
@@ -258,16 +264,13 @@ do
     case "$numbered" in
     '') num= ;;
     *)
     case "$numbered" in
     '') num= ;;
     *)
-       case $total in
-       1) num= ;;
-       *) num=' '`printf "%d/%d" $i $total` ;;
-       esac
+        num=`printf "$numfmt" $i` ;;
     esac
 
     file=`printf '%04d-%stxt' $i "$title"`
     if test '' = "$stdout"
     then
     esac
 
     file=`printf '%04d-%stxt' $i "$title"`
     if test '' = "$stdout"
     then
-           echo "$file"
+           echo "$file"
            process_one >"$outdir$file"
            if test t = "$check"
            then
            process_one >"$outdir$file"
            if test t = "$check"
            then
@@ -278,7 +281,7 @@ do
                :
            fi
     else
                :
            fi
     else
-           echo >&2 "$file"
+           echo >&2 "$file"
            process_one
     fi
     i=`expr "$i" + 1`
            process_one
     fi
     i=`expr "$i" + 1`