From: Chris Packham <judge.packham@gmail.com>
To: git@vger.kernel.org
Cc: Chris Packham <judge.packham@gmail.com>
Subject: [RFC PATCHv2 1/2] am: add gitk patch format
Date: Thu, 4 Sep 2014 10:21:57 +1200 [thread overview]
Message-ID: <1409782918-26133-2-git-send-email-judge.packham@gmail.com> (raw)
In-Reply-To: <1409782918-26133-1-git-send-email-judge.packham@gmail.com>
Patches created using gitk's "write commit to file" functionality (which
uses 'git diff-tree -p --pretty' under the hood) need some massaging in
order to apply cleanly. This consists of dropping the 'commit' line
automatically determining the subject and removing leading whitespace.
Signed-off-by: Chris Packham <judge.packham@gmail.com>
---
Documentation/git-am.txt | 3 ++-
git-am.sh | 36 ++++++++++++++++++++++++++++++++++++
t/t4150-am.sh | 13 +++++++++++++
3 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 9adce37..b59d2b3 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -101,7 +101,8 @@ default. You can use `--no-utf8` to override this.
By default the command will try to detect the patch format
automatically. This option allows the user to bypass the automatic
detection and specify the patch format that the patch(es) should be
- interpreted as. Valid formats are mbox, stgit, stgit-series and hg.
+ interpreted as. Valid formats are mbox, stgit, stgit-series, hg and
+ gitk.
-i::
--interactive::
diff --git a/git-am.sh b/git-am.sh
index ee61a77..f979925 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -227,6 +227,9 @@ check_patch_format () {
"# HG changeset patch")
patch_format=hg
;;
+ 'commit '*)
+ patch_format=gitk
+ ;;
*)
# if the second line is empty and the third is
# a From, Author or Date entry, this is very
@@ -357,6 +360,39 @@ split_patches () {
this=
msgnum=
;;
+ gitk)
+ # These patches are generates with 'git diff-tree -p --pretty'
+ # we discard the 'commit' line, after that the first line not
+ # starting with 'Author:' or 'Date:' is the subject. We also
+ # need to strip leading whitespace from the message body.
+ this=0
+ for gitk in "$@"
+ do
+ this=$(expr "$this" + 1)
+ msgnum=$(printf "%0${prec}d" $this)
+ @@PERL@@ -ne 'BEGIN { $subject = 0; $diff = 0; }
+ if (!$diff) { s/^ // ; }
+ if ($subject > 1) { print ; }
+ elsif (/^commit\s.*$/) { next ; }
+ elsif (/^\s+$/) { next ; }
+ elsif (/^Author:/) { s/Author/From/ ; print ; }
+ elsif (/^Date:/) { print ;}
+ elsif (/^diff --git/) { $diff = 1 ; print ;}
+ elsif ($subject) {
+ $subject = 2 ;
+ print "\n" ;
+ print ;
+ } else {
+ print "Subject: ", $_ ;
+ $subject = 1;
+ }
+ ' <"$gitk" >"$dotest/$msgnum" || clean_abort
+
+ done
+ echo "$this" >"$dotest/last"
+ this=
+ msgnum=
+ ;;
*)
if test -n "$patch_format"
then
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 5edb79a..e36cd0b 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -103,6 +103,7 @@ test_expect_success setup '
echo "X-Fake-Field: Line Three" &&
git format-patch --stdout first | sed -e "1d"
} > patch1-ws.eml &&
+ git diff-tree -p --pretty second >patch1-gitk.eml &&
sed -n -e "3,\$p" msg >file &&
git add file &&
@@ -186,6 +187,18 @@ test_expect_success 'am applies patch e-mail with preceding whitespace' '
test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
'
+test_expect_success 'am applies patch generated by gitk' '
+ cat patch1-gitk.eml &&
+ rm -fr .git/rebase-apply &&
+ git reset --hard &&
+ git checkout first &&
+ git am patch1-gitk.eml &&
+ test_path_is_missing .git/rebase-apply &&
+ git diff --exit-code second &&
+ test "$(git rev-parse second)" = "$(git rev-parse HEAD)" &&
+ test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
+'
+
test_expect_success 'setup: new author and committer' '
GIT_AUTHOR_NAME="Another Thor" &&
GIT_AUTHOR_EMAIL="a.thor@example.com" &&
--
2.0.4.2.gadd452d
next prev parent reply other threads:[~2014-09-03 22:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-03 9:35 [RFC PATCH 0/1] am: bug report and new patch format support Chris Packham
2014-09-03 9:35 ` [RFC PATCH 1/1] am: add gitk patch format Chris Packham
2014-09-03 9:59 ` Chris Packham
2014-09-03 10:18 ` [RFC PATCH 0/1] am: bug report and new patch format support Chris Packham
2014-09-03 22:21 ` [RFC PATCHv2 0/2] am: bug fix " Chris Packham
2014-09-03 22:21 ` Chris Packham [this message]
2014-09-03 23:19 ` [RFC PATCHv2 1/2] am: add gitk patch format Junio C Hamano
2014-09-04 0:46 ` Chris Packham
2014-09-04 17:21 ` Junio C Hamano
2014-09-04 22:47 ` Chris Packham
[not found] ` <CAPc5daWip1dQ5Or6hzmdjoBUStusvs-jK0ODNuzAotNfM5BLbQ@mail.gmail.com>
2014-09-05 1:23 ` Chris Packham
2014-09-05 18:29 ` Junio C Hamano
2014-09-05 21:54 ` Chris Packham
2014-09-03 22:21 ` [RFC PATCHv2 2/2] am: avoid re-directing stdin twice Chris Packham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1409782918-26133-2-git-send-email-judge.packham@gmail.com \
--to=judge.packham@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).