From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6854631734520053760 X-Received: by 2002:a05:651c:2050:: with SMTP id t16mr4594201ljo.25.1596036697930; Wed, 29 Jul 2020 08:31:37 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:ac2:5e33:: with SMTP id o19ls924214lfg.1.gmail; Wed, 29 Jul 2020 08:31:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzp+ESq129dzx/PILTiAOmudiz/4eJzYsWfWF3tj8VnIXKur91oeVpjyFZG9zYXWPpngvrv X-Received: by 2002:a05:6512:34c8:: with SMTP id w8mr17481402lfr.12.1596036697063; Wed, 29 Jul 2020 08:31:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596036697; cv=none; d=google.com; s=arc-20160816; b=028IwPguYALr7kPprrat9mTju2hzQzP1+UklQZ/bdRLEG46SD74L3/rZGaTRCTRBBq 9aCh9q8DI9YS7gns7fLWOMD4mk3BtZb1NwNKjmrk/JtaqGTp305hXI1GZXUdf5Ifx6gU PNH+BxIR5KKo6+1eiaquToM5n+xI06T8uidmeLrkqhyq+G6ZP47TreVjkfYLZnlx0dGR 6wNnoBBL5mcYz8km8F6sPj/f7o5Ymw1WGOvsz8nbCPjDZfgmeb8oPvCSsbX3V1tPZoK+ lCJ0P5nPdRSmvHWVCSeLCrWlXQuerhhIdNKsy2nVR2wyn3iiLq+rqH+VA/5NldedGAMr 6Ejw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject; bh=rk1/6xPa4M6bnz/dFux5/E/2/deg7v8uevIhD17UPCc=; b=H0E4gCMN4RlNORiyKAbp243+liRlpv5WCNGjk3YU4hCI0WNp8Th6Nt/OKBKXTolNUE XPDXcK1QUEXHaAijMcctMRe7e0fzyAQcfQ4LP/OyE2AbKMBLqiuGZ+5JAEjxxmlJGzQa O6Dadv3WJecwrLDqx0L2658YGwnzWJ+MBAWZor7bxi6gRnhQhNsujwilJByNIxbeEHeH LkD+IQWcvykZ5gsmyWt1QgxxoZ1gec3CFejkaURS4oTNQDlxp3Eg7/RCGq2QDN97rVbZ NNiNpYnWvYi8LQqlkDIt3hr1+nbgWiFkRiEgKU9EDYzTnGLAatL8YmkOyaB5ibo+59Nr 0Cjg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=jan.kiszka@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id o13si158410lfc.0.2020.07.29.08.31.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2020 08:31:37 -0700 (PDT) Received-SPF: pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) client-ip=192.35.17.2; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=jan.kiszka@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id 06TFVa49001263 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 29 Jul 2020 17:31:36 +0200 Received: from [167.87.13.2] ([167.87.13.2]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 06TFVZGm024094; Wed, 29 Jul 2020 17:31:35 +0200 Subject: Re: [PATCH 1/2] patch: special-case quilt in debian To: Henning Schild , isar-users@googlegroups.com Cc: "Schmidt, Adriaan (CT RDA IOT SES-DE)" References: <20200728203153.792-1-henning.schild@siemens.com> <20200729170843.3131dabf@md1za8fc.ad001.siemens.net> From: Jan Kiszka Message-ID: <8b30269f-fef1-f351-4e36-bb514666b3e8@siemens.com> Date: Wed, 29 Jul 2020 17:31:34 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20200729170843.3131dabf@md1za8fc.ad001.siemens.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: GF2Rh04DWTrX On 29.07.20 17:08, Henning Schild wrote: > 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? If we are to add a special flag, I would say "debian-patch". Semantic would be "inject into the debian package patch queue (and, implicitly, "apply=no" for Isar). > > 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. Indeed. We likely need to split patches into those that target the source and those that address debian/. The former should be hooked into debian/, the latter could be applied the classic way. Jan > > 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 > -- Siemens AG, Corporate Technology, CT RDA IOT SES-DE Corporate Competence Center Embedded Linux