Skip to content

Commit

Permalink
git-format-patch: --stdout option.
Browse files Browse the repository at this point in the history
This new flag generates the mbox formatted output to the standard
output, instead of saving them into a file per patch and implies --mbox.

It also fixes a corner case where the commit does not have *any* message.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Oct 6, 2005
1 parent 4ebe63d commit 655c747
Showing 1 changed file with 42 additions and 30 deletions.
72 changes: 42 additions & 30 deletions git-format-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
. git-sh-setup || die "Not a git archive."

usage () {
echo >&2 "usage: $0"' [-n] [-o dir] [--keep-subject] [--mbox] [--check] [--signoff] [-<diff options>...] upstream [ our-head ]
echo >&2 "usage: $0"' [-n] [-o dir | --stdout] [--keep-subject] [--mbox] [--check] [--signoff] [-<diff options>...] 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
Expand Down Expand Up @@ -49,6 +49,8 @@ do
numbered=t ;;
-s|--s|--si|--sig|--sign|--signo|--signof|--signoff)
signoff=t ;;
--st|--std|--stdo|--stdou|--stdout)
stdout=t mbox=t date=t author=t ;;
-o=*|--o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*|--output-=*|\
--output-d=*|--output-di=*|--output-dir=*|--output-dire=*|\
--output-direc=*|--output-direct=*|--output-directo=*|\
Expand Down Expand Up @@ -141,25 +143,7 @@ do
esac
done >$series

total=`wc -l <$series | tr -dc "[0-9]"`
i=1
while read commit
do
git-cat-file commit "$commit" | git-stripspace >$commsg
title=`sed -ne "$titleScript" <$commsg`
case "$numbered" in
'') num= ;;
*)
case $total in
1) num= ;;
*) num=' '`printf "%d/%d" $i $total` ;;
esac
esac

file=`printf '%04d-%stxt' $i "$title"`
i=`expr "$i" + 1`
echo "* $file"
{
process_one () {
mailScript='
/./d
/^$/n'
Expand All @@ -178,6 +162,7 @@ do
echo 'From nobody Mon Sep 17 00:00:00 2001' ;# UNIX "From" line
;;
esac

eval "$(sed -ne "$whosepatchScript" $commsg)"
test "$author,$au" = ",$me" || {
mailScript="$mailScript"'
Expand All @@ -196,7 +181,9 @@ Date: '"$ad"
n
b body'

sed -ne "$mailScript" <$commsg
(cat $commsg ; echo; echo) |
sed -ne "$mailScript" |
git-stripspace

test "$signoff" = "t" && {
offsigner=`git-var GIT_COMMITTER_IDENT | sed -e 's/>.*/>/'`
Expand All @@ -222,14 +209,39 @@ Date: '"$ad"
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.
}

total=`wc -l <$series | tr -dc "[0-9]"`
i=1
while read commit
do
git-cat-file commit "$commit" | git-stripspace >$commsg
title=`sed -ne "$titleScript" <$commsg`
case "$numbered" in
'') num= ;;
*)
case $total in
1) num= ;;
*) num=' '`printf "%d/%d" $i $total` ;;
esac
esac

file=`printf '%04d-%stxt' $i "$title"`
if test '' = "$stdout"
then
echo "* $file"
process_one >"$outdir$file"
if test t = "$check"
then
# 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"
:
fi
else
echo >&2 "* $file"
process_one
fi
i=`expr "$i" + 1`
done <$series

0 comments on commit 655c747

Please sign in to comment.