]> code.ossystems Code Review - openembedded-core.git/commitdiff
patch.bbclass: allow importing patches into other dirs
authorTom Rini <tom_rini@mentor.com>
Thu, 31 Mar 2011 17:45:57 +0000 (10:45 -0700)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 4 Apr 2011 12:57:14 +0000 (13:57 +0100)
This is taken from openembedded.master:
commit 9d0d70da60ca8ef278916f442125d41161846f38
Author: Chris Larson <chris_larson@mentor.com>
Date:   Mon Aug 23 13:03:55 2010 -0400

    patch: allow importing patches into other dirs

    Use the 'patchdir' flag.  If relative, it's assumed to be relative to ${S}.
    It creates a patchset class per patch directory, so for quilt this results i
    multiple .pc/patches directories to manage each of the patchsets.

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Tom Rini <tom_rini@mentor.com>
meta/classes/patch.bbclass

index 80fd45f0e3c7b711ba99ae4084ff8b8989202e2a..762216345a8a6f96c71e4278481ce5129eff8d6a 100644 (file)
@@ -31,10 +31,8 @@ python patch_do_patch() {
 
        path = os.getenv('PATH')
        os.putenv('PATH', bb.data.getVar('PATH', d, 1))
-       patchset = cls(s, d)
-       patchset.Clean()
 
-       resolver = rcls(patchset)
+       classes = {}
 
        workdir = bb.data.getVar('WORKDIR', d, 1)
        for url in src_uri:
@@ -117,6 +115,21 @@ python patch_do_patch() {
                                bb.note("Patch '%s' doesn't apply to revision" % pname)
                                continue
 
+               if "patchdir" in parm:
+                       patchdir = parm["patchdir"]
+                       if not os.path.isabs(patchdir):
+                               patchdir = os.path.join(s, patchdir)
+               else:
+                       patchdir = s
+
+               if not patchdir in classes:
+                       patchset = cls(patchdir, d)
+                       resolver = rcls(patchset)
+                       classes[patchdir] = (patchset, resolver)
+                       patchset.Clean()
+               else:
+                       patchset, resolver = classes[patchdir]
+
                bb.note("Applying patch '%s' (%s)" % (pname, oe.path.format_display(local, d)))
                try:
                        patchset.Import({"file":local, "remote":url, "strippath": striplevel}, True)