Code

Teach applymbox to keep the Subject: line.
authorJunio C Hamano <junkio@cox.net>
Wed, 17 Aug 2005 05:18:27 +0000 (22:18 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 17 Aug 2005 05:22:35 +0000 (22:22 -0700)
This corresponds to the -k flag to git format-patch --mbox
option.  The option should probably not be used when applying a
real e-mail patch, but is needed when format-patch and applymbox
pair is used for cherrypicking.

Signed-off-by: Junio C Hamano <junkio@cox.net>
tools/git-applymbox
tools/git-applypatch
tools/mailinfo.c

index e44f5d7970deda7e28566c526be558c5a0c6cc3b..889d4c1743ccdfcf8ad0be96a58eb8b60c03ccdc 100755 (executable)
@@ -9,7 +9,7 @@
 ## You give it a mbox-format collection of emails, and it will try to
 ## apply them to the kernel using "applypatch"
 ##
-## applymbox [ -q ] (-c .dotest/msg-number | mail_archive) [Signoff_file]"
+## applymbox [ -k ] [ -q ] (-c .dotest/msg-number | mail_archive) [Signoff_file]"
 ##
 ## The patch application may fail in the middle.  In which case:
 ## (1) look at .dotest/patch and fix it up to apply
 ## use a Signoff_file, because applypatch wants to append the sign-off
 ## message to msg-clean every time it is run.
 
-query_apply= continue= resume=t
+keep_subject= query_apply= continue= resume=t
 while case "$#" in 0) break ;; esac
 do
        case "$1" in
+       -k)     keep_subject=-k ;;
        -q)     query_apply=t ;;
        -c)     continue="$2"; resume=f; shift ;;
        -*)     usage ;;
@@ -41,6 +42,9 @@ esac
 case "$query_apply" in
 t)     touch .dotest/.query_apply
 esac
+case "$keep_subject" in
+-k)    : >.dotest/.keep_subject
+esac
 
 signoff="$1"
 set x .dotest/0*
@@ -52,7 +56,8 @@ do
     f,$i)      resume=t;;
     f,*)       continue;;
     *)
-           git-mailinfo .dotest/msg .dotest/patch <$i >.dotest/info || exit 1
+           git-mailinfo $keep_subject \
+               .dotest/msg .dotest/patch <$i >.dotest/info || exit 1
            git-stripspace < .dotest/msg > .dotest/msg-clean
            ;;
     esac
index 5a3a44b0e6a4b725bd4771d57aa9a76f100e94ed..406fef34f2cf140893787b16178cd65cbe6f016d 100755 (executable)
@@ -16,6 +16,7 @@ final=.dotest/final-commit
 ## If this file exists, we ask before applying
 ##
 query_apply=.dotest/.query_apply
+keep_subject=.dotest/.keep_subject
 MSGFILE=$1
 PATCHFILE=$2
 INFO=$3
@@ -30,8 +31,10 @@ export SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' .dotest/info)"
 if [ -n "$signoff" -a -f "$signoff" ]; then
        cat $signoff >> $MSGFILE
 fi
+patch_header=
+test -f "$keep_subject" || patch_header='[PATCH] '
 
-(echo "[PATCH] $SUBJECT" ; if [ -s $MSGFILE ]; then echo ; cat $MSGFILE; fi ) > $final
+(echo "$patch_header$SUBJECT" ; if [ -s $MSGFILE ]; then echo ; cat $MSGFILE; fi ) > $final
 
 f=0
 [ -f $query_apply ] || f=1
index fb2ea2b70bf56c59da34bd90158b929b8ee56caa..a36123a1f5bc27e90debcf19d5348937c738d2f2 100644 (file)
@@ -9,6 +9,7 @@
 
 static FILE *cmitmsg, *patchfile;
 
+static int keep_subject = 0;
 static char line[1000];
 static char date[1000];
 static char name[1000];
@@ -101,6 +102,8 @@ static void check_line(char *line, int len)
 
 static char * cleanup_subject(char *subject)
 {
+       if (keep_subject)
+               return subject;
        for (;;) {
                char *p;
                int len, remove;
@@ -242,8 +245,20 @@ static void usage(void)
        exit(1);
 }
 
+static const char mailinfo_usage[] =
+"git-mailinfo [-k] msg patch <mail >info";
 int main(int argc, char ** argv)
 {
+       while (1 < argc && argv[1][0] == '-') {
+               if (!strcmp(argv[1], "-k"))
+                       keep_subject = 1;
+               else {
+                       fprintf(stderr, "usage: %s\n", mailinfo_usage);
+                       exit(1);
+               }
+               argc--; argv++;
+       }
+
        if (argc != 3)
                usage();
        cmitmsg = fopen(argv[1], "w");