From 655c7470e2ea7f25f22703b6654d7570e1567a39 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 6 Oct 2005 14:25:52 -0700 Subject: [PATCH] git-format-patch: --stdout option. 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 --- git-format-patch.sh | 70 ++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/git-format-patch.sh b/git-format-patch.sh index 9378219d84..09b635e492 100755 --- a/git-format-patch.sh +++ b/git-format-patch.sh @@ -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] [-...] upstream [ our-head ] + echo >&2 "usage: $0"' [-n] [-o dir | --stdout] [--keep-subject] [--mbox] [--check] [--signoff] [-...] 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 @@ -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=*|\ @@ -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' @@ -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"' @@ -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/>.*/>/'` @@ -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