From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6854631734520053760 X-Received: by 2002:a05:6402:1ad1:: with SMTP id ba17mr5891611edb.119.1596035325734; Wed, 29 Jul 2020 08:08:45 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a17:906:e299:: with SMTP id gg25ls1191264ejb.11.gmail; Wed, 29 Jul 2020 08:08:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJysi1i4UEuXe42Ao50CPtdhI8gERqCHKaQP2qz1vDuL6k/q33mEocwfIJ7litpjxzDChyW6 X-Received: by 2002:a17:906:430a:: with SMTP id j10mr30312491ejm.163.1596035325143; Wed, 29 Jul 2020 08:08:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596035325; cv=none; d=google.com; s=arc-20160816; b=I+nVIJ/6YNXcWkDzj19R8EgZ1d9lNl1SQUfHp0hr0J1fzGyewczWhHab9bBoAVP5+y ltuKCmAPzwNiIIn4ufXhToEeOtY61pKKYoLFGET1VV8sqG+aW38lkDkZtW0Gg01C+D4w 4mhPa+qI+xypfeQlm6z0boi4iomVnlybKmmsQDp8+rhBBCEXqXYDhYI/4FrHekllVgEn n+lwkPHK6N4tfdm5Za0eUSs9rhhsiRn/2mil28BsnwCmFEvAMxmcyzLBJJ7PnVglfnKw 5Yb3yoze6KxynrAQXxa20VUvyQ6I5XMhtFNXuMhsiXhIYl0absF3uKukxNQMsMIXgJvT TAVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date; bh=0BNz7HVyCp2NrcmiKMwT1xxaQOEYmJ8kdJlJct7VgXU=; b=FCN7ScuvG6acFFAshJS+qgNZYRw/qLvRz7PKXq0/wOWe+daUHmztPrMLDfm7K9An0u PGqxKvLsFr2r/2wwSnlJF7jIqyI892A3b/Ize/hQl/iIWC7jZomz+0W7d3Y68S2TKm7w TCrxTsEO1eYObmbcectUN7CnfVLWm1LYViEWoxTx5aJyUmqXgFulMmdBLh6fdjHsWlpx Og21izyfgxBF1oces8AwmtjnpoyxT3jCdT785x1ovSGBuvGwWcXkLyVhdWNISK+JbWLQ BBNdmtrSFXRLBHxqlIH3Qn7tGRsZgGsJb+m8t2Wi81TtUVH1tFrWmWtog9nclB+4o3Qe 0afg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from david.siemens.de (david.siemens.de. [192.35.17.14]) by gmr-mx.google.com with ESMTPS id b6si144071edq.1.2020.07.29.08.08.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2020 08:08:45 -0700 (PDT) Received-SPF: pass (google.com: domain of henning.schild@siemens.com designates 192.35.17.14 as permitted sender) client-ip=192.35.17.14; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by david.siemens.de (8.15.2/8.15.2) with ESMTPS id 06TF8igC029077 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 29 Jul 2020 17:08:44 +0200 Received: from md1za8fc.ad001.siemens.net ([158.92.8.82]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 06TF8iqJ005869; Wed, 29 Jul 2020 17:08:44 +0200 Date: Wed, 29 Jul 2020 17:08:43 +0200 From: Henning Schild To: Cc: "Schmidt, Adriaan (CT RDA IOT SES-DE)" , "Kiszka, Jan (CT RDA IOT SES-DE)" Subject: Re: [PATCH 1/2] patch: special-case quilt in debian Message-ID: <20200729170843.3131dabf@md1za8fc.ad001.siemens.net> In-Reply-To: <20200728203153.792-1-henning.schild@siemens.com> References: <20200728203153.792-1-henning.schild@siemens.com> X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TUID: uur/bikNEgCH Hi, working on that and getting some feedback from Adriaan the whole issue is harder so solve than i initially thought. Having Isar and Debian use quilt is hard if not impossible to get right. Here i propose to detect Debian-quilt usage and hook into it. While that is a nice idea and actually does work, it has one major problem. We will not be able to patch "debian/" with it, which some patches might want to do. Now why cant we use two quilts (in some cases): 1. in addition to the "patches" dir quilt creates a dir with its state, and it finds that directory on more levels than it finds "patches". That actually means that the first call to quilt will potentially break the other caller, because it will find the wrong state dir and work on the wrong patches. We do not even know which instance comes first, if we fetch with "apt://" debian comes first, otherwise isar comes first. 2. isar never should come first because patching before debian applies its patches means potentially breaking the debian-series, isar needs to patch last ... maybe unless it patches "debian/" ... So i suggest to stick to what i propose with that patch and add a special patching method just for "debian/" and just for the "debian-uses-quilt" case. The user would have to mark the patches somehow, maybe with a naming convention or a SRC_URI paramter. Now we need a special patch method to apply those outside of the debian-quilt universe. SRC_URI+="foo.patch;apply-with-isar=1" What do you think? The two quilts getting into each others ways can potentially also be avoided if we prepare a QUILTRC for the Isar side. In that case we can maybe still use two quilts and give users an option to hook individual patches into debian instead of isar. Because isar should not actually patch before debian does it ... In fact if debian uses quilt any change that debian did not apply itself will trigger build errors, only patches to "debian/" will be ok. Henning On Tue, 28 Jul 2020 22:31:52 +0200 Henning Schild wrote: > From: Henning Schild > > 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 > --- > 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