git-am --one
PATCH 1/1 git-am --one
This patch adds the --one (-o) option to git-am, to apply a single message in RFC 2822 format, as opposed to an mbox. With some MUAs it's a lot easier to save individual messages than with mboxes, and either way the user may want to control the ordering if there are known interdependencies.
Documentation/git-am.txt +5 -1
@@ -8,7 +8,7 @@ git-am - Apply a series of patches in a SYNOPSIS -------- -'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>... +'git-am' [--one] [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>... 'git-am' [--skip | --resolved] DESCRIPTION
@@ -19,6 +19,10 @@ current branch. OPTIONS ------- +--one:: + Indicates that <mbox> contains a single message in RFC 2822 + format, without mbox-style separators. + --signoff:: Add `Signed-off-by:` line to the commit message, using the committer identity of yourself.
git-am.sh +14 -4
@@ -4,7 +4,7 @@ . git-sh-setup usage () { - echo >&2 "usage: $0 [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>" + echo >&2 "usage: $0 [--one] [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>" echo >&2 " or, when resuming" echo >&2 " $0 [--skip | --resolved]" exit 1;
@@ -98,11 +98,13 @@ fall_back_3way () { } prec=4 -dotest=.dotest sign= utf8= keep= skip= interactive= resolved= binary= +dotest=.dotest sign= utf8= keep= skip= interactive= resolved= binary= one= while case "$#" in 0) break;; esac do case "$1" in + -o|--o|--on|--one) + one=t; shift;; -d=*|--d=*|--do=*|--dot=*|--dote=*|--dotes=*|--dotest=*) dotest=`expr "$1" : '-[^=]*=\(.*\)'`; shift ;; -d|--d|--do|--dot|--dote|--dotes|--dotest)
@@ -165,8 +167,16 @@ else mkdir -p "$dotest" || exit # cat does the right thing for us, including '-' to mean - # standard input. - cat "$@" | + # standard input. To prepend the header, we thus want a + # second cat, sigh... + if test "$one" = t + then + LANG=C date +'From - %a %b %d %T %Y' > "$dotest"/fakefrom + fakefrom="$dotest"/fakefrom + else + fakefrom=/dev/null + fi + cat "$@" | cat "$fakefrom" - | git-mailsplit -d$prec "$dotest/" >"$dotest/last" || { rm -fr "$dotest" exit 1
Quoted 4 lines · H. Peter Anvin
This is a multi-part message in MIME format. --------------080605010801030702080802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
BTW, this is totally offtopic, but I find it somewhat puzzling to see somebody like you, one of Linus' trusted lieutenants, is sending a patch as an attachment.
Quoted 9 lines · H. Peter Anvin
This patch adds the --one (-o) option to git-am, to apply a single message in RFC 2822 format, as opposed to an mbox. With some MUAs it's a lot easier to save individual messages than with mboxes, and either way the user may want to control the ordering if there are known interdependencies.
git-am.sh +3
-0+ # standard input. To prepend the header, we thus want a + # second cat, sigh... + if test "$one" = t
git-am.sh else · line 182
Quoted 10 lines
git-am.sh +7
-0+ then + LANG=C date +'From - %a %b %d %T %Y' > "$dotest"/fakefrom + fakefrom="$dotest"/fakefrom + else + fakefrom=/dev/null + fi + cat "$@" | cat "$fakefrom" - | git-mailsplit -d$prec "$dotest/" >"$dotest/last" || { rm -fr "$dotest" exit 1
I understand the motivation, but I suspect skipping mailsplit might be simpler, like this untested code perhaps?
case "$one" in
'')
... original code ...
;;
*)
one=`printf "%${prec}d" 1`
cat "$@" >"$dotest/$one"
echo "$one" >"$dotest/last"
;;
esacQuoted 4 lines · Junio C Hamano
I understand the motivation, but I suspect skipping mailsplit might be simpler, like this untested code perhaps?
Quoted 11 lines
case "$one" in
'')
... original code ...
;;
*)
one=`printf "%${prec}d" 1`
cat "$@" >"$dotest/$one"
echo "$one" >"$dotest/last"
;;
esacIf that works, great. I just implemented it in the "most obviously correct" way, meaning with as few changes as possible.
-hpa
Quoted 15 lines · H. Peter Anvin
Quoted 13 lines · Junio C Hamano
I understand the motivation, but I suspect skipping mailsplit might be simpler, like this untested code perhaps?
case "$one" in '') ... original code ... ;; *) one=`printf "%${prec}d" 1` cat "$@" >"$dotest/$one" echo "$one" >"$dotest/last" ;; esac
Quoted 2 lines
If that works, great. I just implemented it in the "most obviously correct" way, meaning with as few changes as possible.
Another thing you may probably want is to loop over "$@", so that the flag is not --one anymore, but --2822 (or --bare as opposed to mbox format) and do something like this:
case "$series_of_2822_messages" in
'') ... original code ... ;;
*)
i=1
for input
do
this=`printf "%${prec}d" $i
cp "$input" "$dotest/$this"
i=$(($i+1))
done
printf "%${prec}d" $# >"$dotest/last"
;;
esacQuoted 5 lines · Junio C Hamano
Another thing you may probably want is to loop over "$@", so that the flag is not --one anymore, but --2822 (or --bare as opposed to mbox format) and do something like this:
Quoted 14 lines
case "$series_of_2822_messages" in
'') ... original code ... ;;
*)
i=1
for input
do
this=`printf "%${prec}d" $i
cp "$input" "$dotest/$this"
i=$(($i+1))
done
printf "%${prec}d" $# >"$dotest/last"
;;
esacThat is definitely a good idea. I'll mess with it a bit.
-hpa