public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
* [PATCH 1/2] patch: special-case quilt in debian
@ 2020-07-28 20:31 Henning Schild
  2020-07-28 20:31 ` [PATCH 2/2] meta-isar: make sure to quilt patch a debian package Henning Schild
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Henning Schild @ 2020-07-28 20:31 UTC (permalink / raw)
  To: isar-users; +Cc: Henning Schild

From: Henning Schild <henning.schild@siemens.com>

The OE patch lib uses quilt and so do many debian packages as well.
Those two do not work well together, it is really hard to create a patch
that will apply and not break what debian does later. debian is very
pedantic about unexpected changes so even if patching works, building
might not.

Introduce a special-case where we detect quilt usage of a debian package
and hook in there. Also make sure we are on top of debian so we do not
risk breaking patches we inherit from there.

If anyone ever managed to create a patch that works well in the face of
two quilts, that might break with this change. You can set PATCHTOOL to
"quilt" in your recipe to disable the magic.

Signed-off-by: Henning Schild <henning.schild@siemens.com>
---
 meta/classes/patch.bbclass | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass
index 3060755a5c..06f32a2197 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes/patch.bbclass
@@ -91,6 +91,28 @@ def should_apply(parm, d):
 
 should_apply[vardepsexclude] = "DATE SRCDATE"
 
+def patch_do_debian_quilt(patchdir, d):
+    import oe.patch
+    class DummyPatchSet(oe.patch.PatchSet):
+        def Clean(self):
+            True
+
+        def Import(self, patch, force):
+            os.putenv('QUILT_PATCHES', 'debian/patches')
+            # push all so we are on top of debian
+            pushed = False
+            if os.path.exists(os.path.join(self.dir, 'debian/patches/series')):
+                oe.patch.runcmd(["quilt", "push", "-a"], self.dir)
+                pushed = True
+            oe.patch.runcmd(["quilt", "import", "-f", os.path.join(d.getVar('WORKDIR'), os.path.basename(patch['file']))], self.dir)
+            if pushed:
+                oe.patch.runcmd(["quilt", "pop", "-a"], self.dir)
+
+        def Push(self, force = False):
+            True
+
+    return DummyPatchSet(patchdir, d)
+
 python patch_do_patch() {
     import sys
 
@@ -118,6 +140,12 @@ python patch_do_patch() {
 
     s = d.getVar('S')
 
+    debianformat = os.path.join(s, 'debian/source/format')
+    if os.path.exists(debianformat) and d.getVar('PATCHTOOL') != 'quilt':
+        with open(debianformat, 'r+') as f:
+            if f.readline() == '3.0 (quilt)\n':
+                cls = patch_do_debian_quilt
+
     os.putenv('PATH', d.getVar('PATH'))
 
     # We must use one TMPDIR per process so that the "patch" processes
-- 
2.26.2


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-02-08 16:18 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-28 20:31 [PATCH 1/2] patch: special-case quilt in debian Henning Schild
2020-07-28 20:31 ` [PATCH 2/2] meta-isar: make sure to quilt patch a debian package Henning Schild
2020-07-28 20:40   ` Henning Schild
2020-07-28 20:33 ` [PATCH 1/2] patch: special-case quilt in debian Henning Schild
2020-07-29 14:06 ` Jan Kiszka
2020-07-29 14:36   ` Henning Schild
2020-07-29 15:06     ` Jan Kiszka
2020-07-29 14:39 ` Henning Schild
2020-07-29 15:08 ` Henning Schild
2020-07-29 15:31   ` Jan Kiszka
2020-07-29 19:48     ` Henning Schild
2021-02-08 15:50       ` Anton Mikanovich
2021-02-08 16:18         ` Henning Schild

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox