Some workflows prefer to track exactly which email message was used to
generate a commit. This can be used, for example, to generate an
automated acknowledgement when a patch is committed as a response to
the patch email, or as a reference to the thread which introduced the
patch.
Support this by adding a --message-id option (abbreviated as -m) to
git-am, which will then extract the message ID and append it to the
email commit log.
Signed-off-by: Avi Kivity a...@cloudius-systems.com
---
v4: adjust coding style
recover message_id variable after a resumed git-am
use sane_grep
drop unneeded grep error handling
v3: remove bashism and unneeded quoting
v2: adjust to pass test suite (t5100)
Documentation/git-am.txt | 6 ++
builtin/mailinfo.c | 2 +-
git-am.sh| 14 +-
t/t5100/info0004 | 1 +
t/t5100/info0005 | 1 +
t/t5100/info0012 | 1 +
6 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 9adce37..8a251a1 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -15,6 +15,7 @@ SYNOPSIS
[--whitespace=option] [-Cn] [-pn] [--directory=dir]
[--exclude=path] [--include=path] [--reject] [-q | --quiet]
[--[no-]scissors] [-S[keyid]] [--patch-format=format]
+[--message-id]
[(mbox | Maildir)...]
'git am' (--continue | --skip | --abort)
@@ -121,6 +122,11 @@ default. You can use `--no-utf8` to override this.
user to lie about the author date by using the same
value as the committer date.
+-m::
+--message-id::
+ Extract the Message-Id: header from the e-mail and
+ append it to the commit message's tag stanza.
+
--skip::
Skip the current patch. This is only meaningful when
restarting an aborted patch.
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index cf11c8d..f1e1fed 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -278,7 +278,7 @@ static void cleanup_space(struct strbuf *sb)
static void decode_header(struct strbuf *line);
static const char *header[MAX_HDR_PARSED] = {
- From,Subject,Date,
+ From,Subject,Date,Message-Id
};
static inline int cmp_header(const struct strbuf *line, const char *hdr)
diff --git a/git-am.sh b/git-am.sh
index ee61a77..fd0181f 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -39,6 +39,7 @@ committer-date-is-author-datelie about committer date
ignore-date use current timestamp for author date
rerere-autoupdate update the index with reused conflict resolution if possible
S,gpg-sign? GPG-sign commits
+m,message-idcopy the Message-Id: header to the commit's tag stanza
rebasing* (internal use for git-rebase)
. git-sh-setup
@@ -371,7 +372,7 @@ split_patches () {
prec=4
dotest=$GIT_DIR/rebase-apply
sign= utf8=t keep= keepcr= skip= interactive= resolved= rebasing= abort=
-resolvemsg= resume= scissors= no_inbody_headers=
+resolvemsg= resume= scissors= no_inbody_headers= message_id=
git_apply_opt=
committer_date_is_author_date=
ignore_date=
@@ -442,6 +443,8 @@ it will be removed. Please do not use it anymore.
gpg_sign_opt=-S ;;
--gpg-sign=*)
gpg_sign_opt=-S${1#--gpg-sign=} ;;
+ -m|--message-id)
+ message_id=t ;;
--)
shift; break ;;
*)
@@ -565,6 +568,7 @@ Use \git am --abort\ to remove it.)
echo $git_apply_opt $dotest/apply-opt
echo $threeway $dotest/threeway
echo $sign $dotest/sign
+ echo $message_id $dotest/message-id
echo $utf8 $dotest/utf8
echo $keep $dotest/keep
echo $scissors $dotest/scissors
@@ -651,6 +655,10 @@ then
else
SIGNOFF=
fi
+if test $(cat $dotest/message-id) = t
+then
+ message_id=t
+fi
last=$(cat $dotest/last)
this=$(cat $dotest/next)
@@ -757,6 +765,10 @@ To restore the original branch and stop patching run
\\$cmdline --abort\.
then
cat $dotest/msg-clean
fi
+ if test t = $message_id
+ then
+ sane_grep ^Message-Id: $dotest/info
+ fi
if test '' != $ADD_SIGNOFF
then
echo $ADD_SIGNOFF
diff --git a/t/t5100/info0004 b/t/t5100/info0004
index 616c309..f7e2983 100644
--- a/t/t5100/info0004
+++ b/t/t5100/info0004
@@ -2,4 +2,5 @@ Author: YOSHIFUJI Hideaki / 吉藤英明
Email: yoshf...@linux-ipv6.org
Subject: GIT: Try all addresses for given remote name
Date: Thu, 21 Jul 2005 09:10:36 -0400 (EDT)
+Message-Id: 20050721.091036.01119516.yoshf...@linux-ipv6.org
diff --git a/t/t5100/info0005 b/t/t5100/info0005
index 46a46fc..592388f 100644
--- a/t/t5100/info0005
+++ b/t/t5100/info0005
@@ -2,4 +2,5 @@ Author: David Kågedal
Email: dav...@lysator.liu.se
Subject: Fixed two bugs in git-cvsimport-script.
Date: Mon, 15 Aug 2005 20:18:25 +0200