summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-format-patch-script38
-rw-r--r--tools/mailinfo.c10
2 files changed, 40 insertions, 8 deletions
diff --git a/git-format-patch-script b/git-format-patch-script
index 9d26c9c..b775b9b 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 ae279bf..4dcc099 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;