git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Teach applymbox to keep the Subject: line.

From
Junio C Hamano <junkio@cox.net>
Date
Aug 17, 2005, 05:47 UTC
Message-ID
<7vk6il2jz8.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<7vek8t7bva.fsf@assigned-by-dhcp.cox.net>

This is a companion patch to the previous format-patch fix. With "-k", format-patch can be told not to remove the [PATCH] in the original commit, nor to add the [PATCH] on its own.

However, applymbox toolchain has a code to remove [PATCH] (among other things) from the Subject: line, which is the right thing to do when dealing with real e-mailed patches, but it interferes with the "format-patch to applymbox" cherry-picking. The -k flag disables this.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 tools/git-applymbox  |   11 ++++++++---
 tools/git-applypatch |    5 ++++-
 tools/mailinfo.c     |   15 +++++++++++++++
 3 files changed, 27 insertions(+), 4 deletions(-)
6bff6a60680ef402f614abae8189c2cb198cfa49
diff --git a/tools/git-applymbox b/tools/git-applymbox
--- a/tools/git-applymbox
+++ b/tools/git-applymbox
@@ -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
@@ -18,10 +18,11 @@
 ## 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
diff --git a/tools/git-applypatch b/tools/git-applypatch
--- a/tools/git-applypatch
+++ b/tools/git-applypatch
@@ -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/S
 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
diff --git a/tools/mailinfo.c b/tools/mailinfo.c
--- a/tools/mailinfo.c
+++ b/tools/mailinfo.c
@@ -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 l
 
 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");
Previous: Junio C HamanoNext: Linus Torvalds
Message 3 of 15 in “Re: [RFC] Patches exchange is bad?”
  1. Marco CostalbaAug 16, 2005
  2. git-format-patch fixJunio C Hamano, Aug 16, 2005
  3. Teach applymbox to keep the Subject: line.Junio C Hamano, Aug 17, 2005
  4. Linus TorvaldsAug 17, 2005
  5. Sam RavnborgAug 18, 2005
  6. Linus TorvaldsAug 18, 2005
  7. Junio C HamanoAug 19, 2005
  8. Add hooks to tools/git-applypatch.Junio C Hamano, Aug 19, 2005
  9. Junio C HamanoAug 19, 2005
  10. Jeff GarzikAug 17, 2005
  11. Junio C HamanoAug 17, 2005
  12. Linus TorvaldsAug 17, 2005
  13. Junio C HamanoAug 17, 2005
  14. Johannes SchindelinAug 17, 2005
  15. David KågedalAug 18, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.