Reviewing my own code. On Wed, Sep 3, 2014 at 9:35 PM, Chris Packham <judge.packham@xxxxxxxxx> wrote: > 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@xxxxxxxxx> > --- > Documentation/git-am.txt | 3 ++- > git-am.sh | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 37 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..73b0a86 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,38 @@ 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 } > + s/^ // ; This is a little too aggressive. It'll also chomp whitespace from the diff context. We should probably check for the 'diff --git' line and stop stripping whitespace. > + if ($subject > 1) { print ; } > + elsif (/^commit\s.*$/) { next ; } > + elsif (/^\s+$/) { next ; } > + elsif (/^Author:/) { s/Author/From/ ; print ;} > + elsif (/^Date:/) { 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 > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html