From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6854631734520053760 X-Received: by 2002:a1c:1bc7:: with SMTP id b190mr13153593wmb.115.1612799407744; Mon, 08 Feb 2021 07:50:07 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a1c:193:: with SMTP id 141ls7544139wmb.3.canary-gmail; Mon, 08 Feb 2021 07:50:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJwnHZtxP0pfrMYmILQaiQzS5FFEB/WOsBvMyKw17luRzaMCacC/XMVlXI0/Zx8VtnYiN+Ja X-Received: by 2002:a05:600c:4784:: with SMTP id k4mr12819215wmo.56.1612799406701; Mon, 08 Feb 2021 07:50:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612799406; cv=none; d=google.com; s=arc-20160816; b=cEQpdeQqBYoEJ7T5f8peXa/JfAF0tPk9i5zfYlCEEDKklZECmsFPDZsydestmDJAYm GEcAAgFS7YHFlGXbf69VsdceuLKRezAWZbhtd1bl/vSqizBwItJrS9RQS79sCp2SllIG Io7tdPhROX1NRYECANW6t2tJZSarAemiiaX55s3VtzaNwbpabdcNOJXa7jCRyp4KdUQt +IDzDG/egwdG5+bldRGD8mBQsOpzSwO2X4V921t28JiDqM/kWR6rObjdYoRvSWwA+Pb1 YLeZf8E1zKaGDWKg2mATXDU+kPQtrk3kBlvkhTq4FGeWBMSACqM4+UVF+5R6O3RKraUj vtTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-language:content-transfer-encoding:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject; bh=mV1PI18OCutaHps+2IsCXlnrZpNCdSnFBkGS8L3DT28=; b=q4dFRhFuoDuTfXPWM/0zV0prErwJIhdBqw4IFyOwhcKQDLvq22WMYwbXmt8F8rXVa1 j7rKWaozTpZZBorDRLy2lxtBrwN3WqiHDelg10bFkekCBlL7fWOC2T5qqnG41JBAywbY g4KHVs1pqfyeNosgSuH/eazKO3ZVsDb2zIKBUcHqqyS+LWy5OVIWgnxITs/8TsRxQYOj NDovgVRMKV7w7dNiRhohPzEKh2DwDOA2oBrj+SUIVPY71bJgun9DtLszgU1jTz3YA7WN DMHvZ2kPj62vVBRhBm+pSkU759fZcYuc8jlZ7gHH4DVSm6MCauUKUmDG6S5nOmjpkTE3 ukjQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=amikan@ilbers.de Return-Path: Received: from shymkent.ilbers.de (shymkent.ilbers.de. [85.214.156.166]) by gmr-mx.google.com with ESMTPS id 201si10003wmb.2.2021.02.08.07.50.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 08 Feb 2021 07:50:06 -0800 (PST) Received-SPF: pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) client-ip=85.214.156.166; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=amikan@ilbers.de Received: from [192.168.67.164] (mm-203-30-214-37.mgts.dynamic.pppoe.byfly.by [37.214.30.203] (may be forged)) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8) with ESMTPSA id 118Fo59A003144 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 8 Feb 2021 16:50:05 +0100 Subject: Re: [PATCH 1/2] patch: special-case quilt in debian To: Henning Schild , Jan Kiszka Cc: isar-users@googlegroups.com, "Schmidt, Adriaan (CT RDA IOT SES-DE)" References: <20200728203153.792-1-henning.schild@siemens.com> <20200729170843.3131dabf@md1za8fc.ad001.siemens.net> <8b30269f-fef1-f351-4e36-bb514666b3e8@siemens.com> <20200729214842.16a15ae2@md1za8fc.ad001.siemens.net> From: Anton Mikanovich Message-ID: <08fdb9c9-2f17-5c93-d46c-e059b2731167@ilbers.de> Date: Mon, 8 Feb 2021 18:50:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <20200729214842.16a15ae2@md1za8fc.ad001.siemens.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: L37xXCtndA17 Hello, that is the status of patch rebuild? 29.07.2020 22:48, Henning Schild wrote: > On Wed, 29 Jul 2020 17:31:34 +0200 > Jan Kiszka wrote: > >> 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). > I am not sure about the user interface, when patching the source we > should magically hook into debians quilt by default, because we need to > be after debian. That breaks legacy recipes that patch "debian/" ... > > And "debian-patch" could also be misunderstood as patching "debian/". > Let me come up with an implementation and discuss those details later. > >>> 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. > I am afraid the "classic way" wont work, unless we manage to convince > quilt to work on S/patches and do not fall for S/debian/patches in case > of "apt://". I think it is not only "apt://" but might also affect > partial rebuilds where somehow debians quilt already ran before isars > quilt enters the stage. Let us see. > > Henning > >> 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 >>> -- Anton Mikanovich Promwad Ltd. External service provider of ilbers GmbH Maria-Merian-Str. 8 85521 Ottobrunn, Germany +49 (89) 122 67 24-0 Commercial register Munich, HRB 214197 General Manager: Baurzhan Ismagulov