X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-format-patch-script;h=51e8af0acb76679d712884f990a6363cfd235d7e;hb=b32e986cd7a2b3ab4227d63657ef439786a82024;hp=b775b9be683f1819818fa3dfb57392b70ae8574c;hpb=44d2eb51b1c360c0337429f9a4a4f95d26d047eb;p=git.git diff --git a/git-format-patch-script b/git-format-patch-script index b775b9be..51e8af0a 100755 --- a/git-format-patch-script +++ b/git-format-patch-script @@ -4,7 +4,7 @@ # usage () { - echo >&2 "usage: $0"' [-n] [-o dir] [-...] upstream [ our-head ] + echo >&2 "usage: $0"' [-n] [-o dir] [--mbox] [--check] [-...] upstream [ our-head ] Prepare each commit with its patch since our-head forked from upstream, one file per patch, for e-mail submission. Each output file is @@ -16,6 +16,10 @@ the current working directory. When -n is specified, instead of "[PATCH] Subject", the first line is formatted 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 +with applymbox. ' exit 1 } @@ -25,13 +29,19 @@ IFS=' ' LF=' ' -outdir=./ +outdir=./ while case "$#" in 0) break;; esac do case "$1" in + -a|--a|--au|--aut|--auth|--autho|--author) + author=t ;; + -c|--c|--ch|--che|--chec|--check) + check=t ;; -d|--d|--da|--dat|--date) date=t ;; + -m|--m|--mb|--mbo|--mbox) + date=t author=t mbox=t ;; -n|--n|--nu|--num|--numb|--numbe|--number|--numbere|--numbered) numbered=t ;; -o=*|--o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*|--output-=*|\ @@ -71,6 +81,7 @@ trap 'rm -f $tmp-*' 0 1 2 3 15 series=$tmp-series commsg=$tmp-commsg +filelist=$tmp-files titleScript=' /./d @@ -98,7 +109,7 @@ _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" stripCommitHead='/^'"$_x40"' (from '"$_x40"')$/d' git-rev-list --merge-order "$junio" "^$linus" >$series -total=`wc -l <$series` +total=`wc -l <$series | tr -dc "[0-9]"` i=$total while read commit do @@ -115,16 +126,27 @@ do file=`printf '%04d-%stxt' $i "$title"` i=`expr "$i" - 1` - echo "$file" + echo >&2 "* $file" { mailScript=' /./d /^$/n - s|^\[PATCH[^]]*\] *|| - s|^|[PATCH'"$num"'] |' + s|^\[PATCH[^]]*\] *||' + + case "$mbox" in + t) + echo 'From nobody Mon Sep 17 00:00:00 2001' ;# UNIX "From" line + mailScript="$mailScript"' + s|^|Subject: [PATCH'"$num"'] |' + ;; + *) + mailScript="$mailScript"' + s|^|[PATCH'"$num"'] |' + ;; + esac eval "$(sed -ne "$whosepatchScript" $commsg)" - test "$au" = "$me" || { + test "$author,$au" = ",$me" || { mailScript="$mailScript"' a\ From: '"$au" @@ -147,5 +169,20 @@ Date: '"$ad" git-diff-tree -p $diff_opts "$commit" | git-apply --stat --summary echo git-diff-tree -p $diff_opts "$commit" | sed -e "$stripCommitHead" + + case "$mbox" in + t) + echo + ;; + esac } >"$outdir$file" + case "$check" in + t) + # This is slightly modified from Andrew Morton's Perfect Patch. + # Lines you introduce should not have trailing whitespace. + # Also check for an indentation that has SP before a TAB. + grep -n '^+\([ ]* .*\|.*[ ]\)$' "$outdir$file" + + : do not exit with non-zero because we saw no problem in the last one. + esac done <$series