diff options
-rwxr-xr-x | git-format-patch-script | 38 | ||||
-rw-r--r-- | tools/mailinfo.c | 10 |
2 files changed, 40 insertions, 8 deletions
diff --git a/git-format-patch-script b/git-format-patch-script index 9d26c9c46..b775b9be6 100755 --- a/git-format-patch-script +++ b/git-format-patch-script @@ -30,6 +30,8 @@ outdir=./ while case "$#" in 0) break;; esac do case "$1" in + -d|--d|--da|--dat|--date) + date=t ;; -n|--n|--nu|--num|--numb|--numbe|--number|--numbere|--numbered) numbered=t ;; -o=*|--o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*|--output-=*|\ @@ -56,6 +58,8 @@ esac junio=`git-rev-parse --verify "$junio"` linus=`git-rev-parse --verify "$linus"` +me=`git-var GIT_AUTHOR_IDENT | sed -e 's/>.*/>/'` + case "$outdir" in */) ;; *) outdir="$outdir/" ;; @@ -66,6 +70,7 @@ tmp=.tmp-series$$ trap 'rm -f $tmp-*' 0 1 2 3 15 series=$tmp-series +commsg=$tmp-commsg titleScript=' /./d @@ -82,6 +87,12 @@ titleScript=' q ' +whosepatchScript=' +/^author /{ + s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p + q +}' + _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' @@ -91,9 +102,8 @@ total=`wc -l <$series` i=$total while read commit do - title=`git-cat-file commit "$commit" | - git-stripspace | - sed -ne "$titleScript"` + git-cat-file commit "$commit" | git-stripspace >$commsg + title=`sed -ne "$titleScript" <$commsg` case "$numbered" in '') num= ;; *) @@ -102,6 +112,7 @@ do *) num=' '`printf "%d/%d" $i $total` ;; esac esac + file=`printf '%04d-%stxt' $i "$title"` i=`expr "$i" - 1` echo "$file" @@ -109,15 +120,28 @@ do mailScript=' /./d /^$/n - s|^|[PATCH'"$num"'] | + s|^\[PATCH[^]]*\] *|| + s|^|[PATCH'"$num"'] |' + + eval "$(sed -ne "$whosepatchScript" $commsg)" + test "$au" = "$me" || { + mailScript="$mailScript"' + a\ +From: '"$au" + } + test "$date,$au" = ",$me" || { + mailScript="$mailScript"' + a\ +Date: '"$ad" + } + + mailScript="$mailScript"' : body p n b body' - git-cat-file commit "$commit" | - git-stripspace | - sed -ne "$mailScript" + sed -ne "$mailScript" <$commsg echo '---' echo git-diff-tree -p $diff_opts "$commit" | git-apply --stat --summary diff --git a/tools/mailinfo.c b/tools/mailinfo.c index ae279bffa..4dcc09919 100644 --- a/tools/mailinfo.c +++ b/tools/mailinfo.c @@ -220,8 +220,9 @@ static int eatspace(char *line) static void handle_body(void) { int has_from = 0; + int has_date = 0; - /* First line of body can be a From: */ + /* First lines of body can have From: and Date: */ while (fgets(line, sizeof(line), stdin) != NULL) { int len = eatspace(line); if (!len) @@ -232,6 +233,13 @@ static void handle_body(void) continue; } } + if (!memcmp("Date:", line, 5) && isspace(line[5])) { + if (!has_date) { + handle_date(line+6); + has_date = 1; + continue; + } + } line[len] = '\n'; handle_rest(); break; |