Reviewing my own code.
On Wed, Sep 3, 2014 at 9:35 PM, Chris Packham <[email protected]> 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 <[email protected]>
> ---
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html