git-am foreign patch support: autodetect some patch formats
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Wed, 27 May 2009 21:20:12 +0000 (23:20 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 29 May 2009 06:06:34 +0000 (23:06 -0700)
Default to mbox format if input is from stdin. Otherwise, look at the
first few lines of the first patch to try to guess its format.

Include checks for mailboxes, stgit patch series, stgit single patches
and hg patches.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-am.sh

index da160de3c33404dc4ebe81714af61a2d45ea8ad6..552b888703e56462bb19372820c99246268f477a 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -142,7 +142,45 @@ check_patch_format () {
        then
                return 0
        fi
-       patch_format=mbox
+
+       # we default to mbox format if input is from stdin and for
+       # directories
+       if test $# = 0 || test "x$1" = "x-" || test -d "$1"
+       then
+               patch_format=mbox
+               return 0
+       fi
+
+       # otherwise, check the first few lines of the first patch to try
+       # to detect its format
+       {
+               read l1
+               read l2
+               read l3
+               case "$l1" in
+               "From "* | "From: "*)
+                       patch_format=mbox
+                       ;;
+               '# This series applies on GIT commit'*)
+                       patch_format=stgit-series
+                       ;;
+               "# HG changeset patch")
+                       patch_format=hg
+                       ;;
+               *)
+                       # if the second line is empty and the third is
+                       # a From, Author or Date entry, this is very
+                       # likely an StGIT patch
+                       case "$l2,$l3" in
+                       ,"From: "* | ,"Author: "* | ,"Date: "*)
+                               patch_format=stgit
+                               ;;
+                       *)
+                               ;;
+                       esac
+                       ;;
+               esac
+       } < "$1"
 }
 
 split_patches () {