[oe-commits] Laszlo Papp : lib/oe/patch.py: Prefer "git am" over "git apply" when applying git patches

git at git.openembedded.org git at git.openembedded.org
Tue Jan 28 00:33:57 UTC 2014


Module: openembedded-core.git
Branch: master-next
Commit: 25cb5e4d9f2c3267d8b92538c36c37d3ef1dbd22
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=25cb5e4d9f2c3267d8b92538c36c37d3ef1dbd22

Author: Laszlo Papp <lpapp at kde.org>
Date:   Tue Dec 24 12:44:10 2013 +0000

lib/oe/patch.py: Prefer "git am" over "git apply" when applying git patches

It is better to use "git am" when possible to preserve the commit messages and
the mail format in general for patches when those are present. A typical use
case is when developers would like to keep the changes on top of the latest
upstream, and they may occasionally need to rebase. This is not possible with
"git diff" and "diff" generated patches.

Since this is not always the case, the fallback would be the "git apply"
operation which is currently available.

Signed-off-by: Laszlo Papp <lpapp at kde.org>
Signed-off-by: Saul Wold <sgw at linux.intel.com>

---

 meta/lib/oe/patch.py | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py
index 59abd0a..b085c9d 100644
--- a/meta/lib/oe/patch.py
+++ b/meta/lib/oe/patch.py
@@ -203,17 +203,23 @@ class GitApplyTree(PatchTree):
         PatchTree.__init__(self, dir, d)
 
     def _applypatch(self, patch, force = False, reverse = False, run = True):
-        shellcmd = ["git", "--git-dir=.", "apply", "-p%s" % patch['strippath']]
+        def _applypatchhelper(shellcmd, patch, force = False, reverse = False, run = True):
+            if reverse:
+                shellcmd.append('-R')
 
-        if reverse:
-            shellcmd.append('-R')
+            shellcmd.append(patch['file'])
 
-        shellcmd.append(patch['file'])
+            if not run:
+                return "sh" + "-c" + " ".join(shellcmd)
 
-        if not run:
-            return "sh" + "-c" + " ".join(shellcmd)
+            return runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
 
-        return runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+        try:
+            shellcmd = ["git", "--work-tree=.", "am", "-3", "-p%s" % patch['strippath']]
+            return _applypatchhelper(shellcmd, patch, force, reverse, run)
+        except CmdError:
+            shellcmd = ["git", "--git-dir=.", "apply", "-p%s" % patch['strippath']]
+            return _applypatchhelper(shellcmd, patch, force, reverse, run)
 
 
 class QuiltTree(PatchSet):



More information about the Openembedded-commits mailing list