From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 29 07:31:45 2019 Received: (at submit) by debbugs.gnu.org; 29 Nov 2019 12:31:45 +0000 Received: from localhost ([127.0.0.1]:59674 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iafR1-0000Yd-KG for submit@debbugs.gnu.org; Fri, 29 Nov 2019 07:31:45 -0500 Received: from lists.gnu.org ([209.51.188.17]:40233) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iafQz-0000VG-Ni for submit@debbugs.gnu.org; Fri, 29 Nov 2019 07:31:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48833) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iafQs-0000Fb-5w for bug-gnu-emacs@gnu.org; Fri, 29 Nov 2019 07:31:38 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iafQk-0001iX-1r for bug-gnu-emacs@gnu.org; Fri, 29 Nov 2019 07:31:31 -0500 Received: from mail-pf1-f170.google.com ([209.85.210.170]:35701) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iafQj-0001WV-Fj for bug-gnu-emacs@gnu.org; Fri, 29 Nov 2019 07:31:25 -0500 Received: by mail-pf1-f170.google.com with SMTP id q13so14598524pff.2 for ; Fri, 29 Nov 2019 04:31:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Wk19ZJo3EmvNkFLao8bs1Czu0Nrg3pyMZP4gec7jjqs=; b=fkfKNFokV2xY8/02nGKg2M299B+CxbxMBtDeUaEZV20kzLPwEGw+k1hpg3PTbwfkQ8 lvDkUrkHqnQQ3FFlX+ZM+8pjc9sNSeRgbyfi9vTEYw+bY+5ub/P8C3M4bUIll+aZedLj 7zvEXhJtU6VtA+WChtFk0PJBSFbSKhKpqUeO3bnqWRbTW8fAd5X0cEavw2NtOmTiLU5L CRxurmpBR94FMXy6Zuu1jvCJt2MSVOJFWrr0NncpKp6I9Yvfc2q45Z4ofTNagtItl0XX 13JpTYtMlQDq7PQItd4tv0rgLpfZGU3taIqAp62Mi9qh7yPt5RPinSVBLRYoUN0FEk/r CSOg== X-Gm-Message-State: APjAAAWUeNzFkVOpln03FHI6ED59qCUAo/CQwSh8jix8L7o7HIrnIQGf mHcbSoAwajtCrRE/SPchZA3HjnPQmThdhSms9RxYtw== X-Google-Smtp-Source: APXvYqw8UezOg6WCwiTl2mbx5dAjaBOArlTZLLheBbfX54wFlUjpu6V8p7kjXR7Yf1bNkeNRGaP5JkoybY1TGVQDP3U= X-Received: by 2002:a63:4948:: with SMTP id y8mr17198664pgk.333.1575030681665; Fri, 29 Nov 2019 04:31:21 -0800 (PST) MIME-Version: 1.0 From: Stefan Kangas Date: Fri, 29 Nov 2019 13:31:10 +0100 Message-ID: Subject: [PATCH] Add new filter functions to Package Menu To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary="0000000000004ac41505987b68a6" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.210.170 X-Spam-Score: 1.2 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: The attached patches adds new commands to filter the "*Packages*" buffer by version, status and archive. (The first patch only adds new version list comparison predicates, something I needed to simpli [...] Content analysis details: (1.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.2 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (stefankangas[at]gmail.com) -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [209.51.188.17 listed in list.dnswl.org] 0.2 FREEMAIL_FORGED_FROMDOMAIN 2nd level domains in From and EnvelopeFrom freemail headers are different 2.0 SPOOFED_FREEMAIL No description available. X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.8 (-) --0000000000004ac41505987b68a6 Content-Type: text/plain; charset="UTF-8" The attached patches adds new commands to filter the "*Packages*" buffer by version, status and archive. (The first patch only adds new version list comparison predicates, something I needed to simplify the second patch.) I meant to sent this earlier, but got too busy with real life. I hope that it's not too late to make it into Emacs 27. Best regards, Stefan Kangas --0000000000004ac41505987b68a6 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-version-comparison-predicates-for-and.patch" Content-Disposition: attachment; filename="0001-Add-version-comparison-predicates-for-and.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k3k4fbux1 RnJvbSBhMjc0MTBjZDJlZjc1NThmYzY2ODQyZGFiMzQ1NGJlNDRkODE2YjYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gS2FuZ2FzIDxzdGVmYW5rYW5nYXNAZ21haWwuY29t PgpEYXRlOiBUdWUsIDEyIE5vdiAyMDE5IDAyOjAxOjIyICswMTAwClN1YmplY3Q6IFtQQVRDSCAx LzJdIEFkZCB2ZXJzaW9uIGNvbXBhcmlzb24gcHJlZGljYXRlcyBmb3IgPiBhbmQgPj0KCiogbGlz cC9zdWJyLmVsICh2ZXJzaW9uLWxpc3QtPiwgdmVyc2lvbi1saXN0LT49LCB2ZXJzaW9uPikKKHZl cnNpb24+PSk6IE5ldyBmdW5jdGlvbnMuCgoqIHRlc3QvbGlzcC9zdWJyLXRlc3RzLmVsIChzdWJy LXRlc3QtdmVyc2lvbi1saXN0LTwpCihzdWJyLXRlc3QtdmVyc2lvbi1saXN0LT4sIHN1YnItdGVz dC12ZXJzaW9uLWxpc3QtPSkKKHN1YnItdGVzdC12ZXJzaW9uLWxpc3QtPD0sIHN1YnItdGVzdC12 ZXJzaW9uLWxpc3QtPj0pOiBOZXcgdGVzdHMuCi0tLQogbGlzcC9zdWJyLmVsICAgICAgICAgICAg fCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIHRlc3QvbGlzcC9z dWJyLXRlc3RzLmVsIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAy IGZpbGVzIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvbGlzcC9zdWJyLmVsIGIvbGlzcC9zdWJyLmVsCmluZGV4IGMxNjE0YzJlMDMuLjBlMDMz OTI1NjEgMTAwNjQ0Ci0tLSBhL2xpc3Avc3Vici5lbAorKysgYi9saXNwL3N1YnIuZWwKQEAgLTU1 NjgsNiArNTU2OCwxNCBAQCB2ZXJzaW9uLWxpc3QtPAogICAgOzsgbDEgbnVsbCBhbmQgbDIgbm90 IG51bGwgICAgID09PiBsMiBsZW5ndGggPiBsMSBsZW5ndGgKICAgICh0ICAoPCAwICh2ZXJzaW9u LWxpc3Qtbm90LXplcm8gbDIpKSkpKQogCisoZGVmdW4gdmVyc2lvbi1saXN0LT4gKGwxIGwyKQor ICAiUmV0dXJuIHQgaWYgTDEsIGEgbGlzdCBzcGVjaWZpY2F0aW9uIG9mIGEgdmVyc2lvbiwgaXMg aGlnaGVyIHRoYW4gTDIuCisKK05vdGUgdGhhdCBhIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZSBs aXN0ICgxKSBpcyBlcXVhbCB0byAoMSAwKSwKK1woMSAwIDApLCAoMSAwIDAgMCksIGV0Yy4gIFRo YXQgaXMsIHRoZSB0cmFpbGluZyB6ZXJvcyBhcmUgaW5zaWduaWZpY2FudC4KK0Fsc28sIGEgdmVy c2lvbiBnaXZlbiBieSB0aGUgbGlzdCAoMSkgaXMgaGlnaGVyIHRoYW4gKDEgLTEpLCB3aGljaCBp bgordHVybiBpcyBoaWdoZXIgdGhhbiAoMSAtMiksIHdoaWNoIGlzIGhpZ2hlciB0aGFuICgxIC0z KS4iCisgIChub3QgKHZlcnNpb24tbGlzdC08PSBsMSBsMikpKQogCiAoZGVmdW4gdmVyc2lvbi1s aXN0LT0gKGwxIGwyKQogICAiUmV0dXJuIHQgaWYgTDEsIGEgbGlzdCBzcGVjaWZpY2F0aW9uIG9m IGEgdmVyc2lvbiwgaXMgZXF1YWwgdG8gTDIuCkBAIC01NTg5LDcgKzU1OTcsNiBAQCB2ZXJzaW9u LWxpc3QtPQogICAgOzsgbDEgbnVsbCBhbmQgbDIgbm90IG51bGwgPT0+IGwyIGxlbmd0aCA+IGwx IGxlbmd0aAogICAgKHQgICh6ZXJvcCAodmVyc2lvbi1saXN0LW5vdC16ZXJvIGwyKSkpKSkKIAot CiAoZGVmdW4gdmVyc2lvbi1saXN0LTw9IChsMSBsMikKICAgIlJldHVybiB0IGlmIEwxLCBhIGxp c3Qgc3BlY2lmaWNhdGlvbiBvZiBhIHZlcnNpb24sIGlzIGxvd2VyIG9yIGVxdWFsIHRvIEwyLgog CkBAIC01NjEwLDYgKzU2MTcsMTUgQEAgdmVyc2lvbi1saXN0LTw9CiAgICA7OyBsMSBudWxsIGFu ZCBsMiBub3QgbnVsbCA9PT4gbDIgbGVuZ3RoID4gbDEgbGVuZ3RoCiAgICAodCAgKDw9IDAgKHZl cnNpb24tbGlzdC1ub3QtemVybyBsMikpKSkpCiAKKyhkZWZ1biB2ZXJzaW9uLWxpc3QtPj0gKGwx IGwyKQorICAiUmV0dXJuIHQgaWYgTDEsIGEgbGlzdCBzcGVjaWZpY2F0aW9uIG9mIGEgdmVyc2lv biwgaXMgaGlnaGVyIG9yIGVxdWFsIHRvIEwyLgorCitOb3RlIHRoYXQgYSB2ZXJzaW9uIHNwZWNp ZmllZCBieSB0aGUgbGlzdCAoMSkgaXMgZXF1YWwgdG8gKDEgMCksCitcKDEgMCAwKSwgKDEgMCAw IDApLCBldGMuICBUaGF0IGlzLCB0aGUgdHJhaWxpbmcgemVyb3MgYXJlIGluc2lnbmlmaWNhbnQu CitBbHNvLCBhIHZlcnNpb24gZ2l2ZW4gYnkgdGhlIGxpc3QgKDEpIGlzIGhpZ2hlciB0aGFuICgx IC0xKSwgd2hpY2ggaW4KK3R1cm4gaXMgaGlnaGVyIHRoYW4gKDEgLTIpLCB3aGljaCBpcyBoaWdo ZXIgdGhhbiAoMSAtMykuIgorICAobm90ICh2ZXJzaW9uLWxpc3QtPCBsMSBsMikpKQorCiAoZGVm dW4gdmVyc2lvbi1saXN0LW5vdC16ZXJvIChsc3QpCiAgICJSZXR1cm4gdGhlIGZpcnN0IG5vbi16 ZXJvIGVsZW1lbnQgb2YgTFNULCB3aGljaCBpcyBhIGxpc3Qgb2YgaW50ZWdlcnMuCiAKQEAgLTU2 MjEsNyArNTYzNyw2IEBAIHZlcnNpb24tbGlzdC1ub3QtemVybwogICAgIDs7IHRoZXJlIGlzIG5v IGVsZW1lbnQgZGlmZmVyZW50IG9mIHplcm8KICAgICAwKSkKIAotCiAoZGVmdW4gdmVyc2lvbjwg KHYxIHYyKQogICAiUmV0dXJuIHQgaWYgdmVyc2lvbiBWMSBpcyBsb3dlciAob2xkZXIpIHRoYW4g VjIuCiAKQEAgLTU2NTIsNiArNTY2NywyNiBAQCB2ZXJzaW9uPQogQWxzbywgXCItR0lUXCIsIFwi LUNWU1wiIGFuZCBcIi1OTk5cIiBhcmUgdHJlYXRlZCBhcyBzbmFwc2hvdCB2ZXJzaW9ucy4iCiAg ICh2ZXJzaW9uLWxpc3QtPSAodmVyc2lvbi10by1saXN0IHYxKSAodmVyc2lvbi10by1saXN0IHYy KSkpCiAKKyhkZWZ1biB2ZXJzaW9uPiAodjEgdjIpCisgICJSZXR1cm4gdCBpZiB2ZXJzaW9uIFYx IGlzIGhpZ2hlciB0aGFuIFYyLgorCitOb3RlIHRoYXQgdmVyc2lvbiBzdHJpbmcgXCIxXCIgaXMg ZXF1YWwgdG8gXCIxLjBcIiwgXCIxLjAuMFwiLCBcIjEuMC4wLjBcIiwKK2V0Yy4gIFRoYXQgaXMs IHRoZSB0cmFpbGluZyBcIi4wXCJzIGFyZSBpbnNpZ25pZmljYW50LiAgQWxzbywgdmVyc2lvbgor c3RyaW5nIFwiMVwiIGlzIGhpZ2hlciAobmV3ZXIpIHRoYW4gXCIxcHJlXCIsIHdoaWNoIGlzIGhp Z2hlciB0aGFuIFwiMWJldGFcIiwKK3doaWNoIGlzIGhpZ2hlciB0aGFuIFwiMWFscGhhXCIsIHdo aWNoIGlzIGhpZ2hlciB0aGFuIFwiMXNuYXBzaG90XCIuCitBbHNvLCBcIi1HSVRcIiwgXCItQ1ZT XCIgYW5kIFwiLU5OTlwiIGFyZSB0cmVhdGVkIGFzIHNuYXBzaG90IHZlcnNpb25zLiIKKyAgKG5v dCAodmVyc2lvbi1saXN0LTw9ICh2ZXJzaW9uLXRvLWxpc3QgdjEpICh2ZXJzaW9uLXRvLWxpc3Qg djIpKSkpCisKKyhkZWZ1biB2ZXJzaW9uPj0gKHYxIHYyKQorICAiUmV0dXJuIHQgaWYgdmVyc2lv biBWMSBpcyBoaWdoZXIgb3IgZXF1YWwgdG8gVjIuCisKK05vdGUgdGhhdCB2ZXJzaW9uIHN0cmlu ZyBcIjFcIiBpcyBlcXVhbCB0byBcIjEuMFwiLCBcIjEuMC4wXCIsIFwiMS4wLjAuMFwiLAorZXRj LiAgVGhhdCBpcywgdGhlIHRyYWlsaW5nIFwiLjBcInMgYXJlIGluc2lnbmlmaWNhbnQuICBBbHNv LCB2ZXJzaW9uCitzdHJpbmcgXCIxXCIgaXMgaGlnaGVyIChuZXdlcikgdGhhbiBcIjFwcmVcIiwg d2hpY2ggaXMgaGlnaGVyIHRoYW4gXCIxYmV0YVwiLAord2hpY2ggaXMgaGlnaGVyIHRoYW4gXCIx YWxwaGFcIiwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gXCIxc25hcHNob3RcIi4KK0Fsc28sIFwiLUdJ VFwiLCBcIi1DVlNcIiBhbmQgXCItTk5OXCIgYXJlIHRyZWF0ZWQgYXMgc25hcHNob3QgdmVyc2lv bnMuIgorICAobm90ICh2ZXJzaW9uLWxpc3QtPCAodmVyc2lvbi10by1saXN0IHYxKSAodmVyc2lv bi10by1saXN0IHYyKSkpKQorCiAoZGVmdmFyIHBhY2thZ2UtLWJ1aWx0aW4tdmVyc2lvbnMKICAg OzsgTW9zdGx5IHBvcHVsYXRlZCBieSBsb2FkZGVmcy5lbCB2aWEgYXV0b2xvYWQtYnVpbHRpbi1w YWNrYWdlLXZlcnNpb25zLgogICAocHVyZWNvcHkgYCgoZW1hY3MgLiAsKHZlcnNpb24tdG8tbGlz dCBlbWFjcy12ZXJzaW9uKSkpKQpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL3N1YnItdGVzdHMuZWwg Yi90ZXN0L2xpc3Avc3Vici10ZXN0cy5lbAppbmRleCBiM2MwNGNkYzlhLi5mOWNkY2M0YThiIDEw MDY0NAotLS0gYS90ZXN0L2xpc3Avc3Vici10ZXN0cy5lbAorKysgYi90ZXN0L2xpc3Avc3Vici10 ZXN0cy5lbApAQCAtMjQ0LDYgKzI0NCw0MiBAQCBzdWJyLXRlc3QtdmVyc2lvbi1wYXJzaW5nCiAg ICAgICAgICAgICAgIChlcnJvci1tZXNzYWdlLXN0cmluZyAoc2hvdWxkLWVycm9yICh2ZXJzaW9u LXRvLWxpc3QgImJldGEyMl84YWxwaGEzIikpKQogICAgICAgICAgICAgICAiSW52YWxpZCB2ZXJz aW9uIHN5bnRheDogYGJldGEyMl84YWxwaGEzJyAobXVzdCBzdGFydCB3aXRoIGEgbnVtYmVyKSIp KSkpCiAKKyhlcnQtZGVmdGVzdCBzdWJyLXRlc3QtdmVyc2lvbi1saXN0LTwgKCkKKyAgKHNob3Vs ZCAodmVyc2lvbi1saXN0LTwgJygwKSAnKDEpKSkKKyAgKHNob3VsZCAodmVyc2lvbi1saXN0LTwg JygwIDkpICcoMSAwKSkpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC08ICcoMSAtMSkgJygxIDAp KSkKKyAgKHNob3VsZCAodmVyc2lvbi1saXN0LTwgJygxIC0yKSAnKDEgLTEpKSkKKyAgKHNob3Vs ZCAobm90ICh2ZXJzaW9uLWxpc3QtPCAnKDEpICcoMCkpKSkKKyAgKHNob3VsZCAobm90ICh2ZXJz aW9uLWxpc3QtPCAnKDEgMSkgJygxIDApKSkpCisgIChzaG91bGQgKG5vdCAodmVyc2lvbi1saXN0 LTwgJygxKSAnKDEgMCkpKSkKKyAgKHNob3VsZCAobm90ICh2ZXJzaW9uLWxpc3QtPCAnKDEgMCkg JygxIDAgMCkpKSkpCisKKyhlcnQtZGVmdGVzdCBzdWJyLXRlc3QtdmVyc2lvbi1saXN0LT4gKCkK KyAgKHNob3VsZCAodmVyc2lvbi1saXN0LT4gJygxIDApICcoMCA5KSkpCisgIChzaG91bGQgKHZl cnNpb24tbGlzdC0+ICcoMSkgJygxIC0xKSkpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC0+ICco MSkgJygwKSkpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC0+ICcoMSAxKSAnKDEgMCkpKQorICAo c2hvdWxkIChub3QgKHZlcnNpb24tbGlzdC0+ICcoMCkgJygxKSkpKQorICAoc2hvdWxkIChub3Qg KHZlcnNpb24tbGlzdC0+ICcoMSkgJygxIDApKSkpCisgIChzaG91bGQgKG5vdCAodmVyc2lvbi1s aXN0LT4gJygxIDApICcoMSAwIDApKSkpKQorCisoZXJ0LWRlZnRlc3Qgc3Vici10ZXN0LXZlcnNp b24tbGlzdC09ICgpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC09ICcoMSkgJygxKSkpCisgIChz aG91bGQgKHZlcnNpb24tbGlzdC09ICcoMSAwKSAnKDEpKSkKKyAgKHNob3VsZCAobm90ICh2ZXJz aW9uLWxpc3QtPSAnKDApICcoMSkpKSkpCisKKyhlcnQtZGVmdGVzdCBzdWJyLXRlc3QtdmVyc2lv bi1saXN0LTw9ICgpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC08PSAnKDApICcoMSkpKQorICAo c2hvdWxkICh2ZXJzaW9uLWxpc3QtPD0gJygxKSAnKDEpKSkKKyAgKHNob3VsZCAodmVyc2lvbi1s aXN0LTw9ICcoMSAwKSAnKDEpKSkKKyAgKHNob3VsZCAobm90ICh2ZXJzaW9uLWxpc3QtPD0gJygx KSAnKDApKSkpKQorCisoZXJ0LWRlZnRlc3Qgc3Vici10ZXN0LXZlcnNpb24tbGlzdC0+PSAoKQor ICAoc2hvdWxkICh2ZXJzaW9uLWxpc3QtPj0gJygxKSAnKDApKSkKKyAgKHNob3VsZCAodmVyc2lv bi1saXN0LT49ICcoMSkgJygxKSkpCisgIChzaG91bGQgKHZlcnNpb24tbGlzdC0+PSAnKDEgMCkg JygxKSkpCisgIChzaG91bGQgKG5vdCAodmVyc2lvbi1saXN0LT49ICcoMCkgJygxKSkpKSkKKwog KGRlZnVuIHN1YnItdGVzdC0tYmFja3RyYWNlLWZyYW1lcy13aXRoLWJhY2t0cmFjZS1mcmFtZSAo YmFzZSkKICAgIlJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFja3RyYWNlLWZyYW1lcycu IgogICAobGV0ICgoaWR4IDApCi0tIAoyLjIwLjEKCg== --0000000000004ac41505987b68a6 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Add-new-filter-functions-to-Package-Menu.patch" Content-Disposition: attachment; filename="0002-Add-new-filter-functions-to-Package-Menu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k3k4flti1 RnJvbSAyYzk4ZjljYTEyZGFhZjQwYjM1Yzg2ODAxZmMwMTM3OTc1YmRlMzEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gS2FuZ2FzIDxzdGVmYW5rYW5nYXNAZ21haWwuY29t PgpEYXRlOiBUdWUsIDUgTm92IDIwMTkgMTU6NDg6NDggKzAxMDAKU3ViamVjdDogW1BBVENIIDIv Ml0gQWRkIG5ldyBmaWx0ZXIgZnVuY3Rpb25zIHRvIFBhY2thZ2UgTWVudQoKKiBsaXNwL2VtYWNz LWxpc3AvcGFja2FnZS5lbCAocGFja2FnZS1tZW51LWZpbHRlci1ieS12ZXJzaW9uKQoocGFja2Fn ZS1tZW51LWZpbHRlci1ieS1zdGF0dXMsIHBhY2thZ2UtbWVudS1maWx0ZXItYnktYXJjaGl2ZSk6 Ck5ldyBmaWx0ZXIgZnVuY3Rpb25zLgoocGFja2FnZS1tZW51LS1maWx0ZXItYnkpOiBOZXcgaGVs cGVyIGZ1bmN0aW9uLgoocGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkLCBwYWNrYWdlLW1l bnUtZmlsdGVyLWJ5LW5hbWUpOiBVc2UKYWJvdmUgaGVscGVyIGZ1bmN0aW9uLgoocGFja2FnZS1t ZW51LW1vZGUtbWVudSk6CihwYWNrYWdlLW1lbnUtbW9kZS1tYXApOiBVcGRhdGUgbWVudSB0byBp bmNsdWRlIG5ldyBmaWx0ZXIgZnVuY3Rpb25zLgoqIGRvYy9lbWFjcy9wYWNrYWdlLnRleGkgKFBh Y2thZ2UgTWVudSk6IERvY3VtZW50IGl0LgoqIGV0Yy9ORVdTOiBBbm5vdW5jZSBpdC4KCihwYWNr YWdlLW1lbnUtLXJlZnJlc2gpOiBSZW1vdmUgdCBhcyBzeW5vbnltIGZvciBuaWwgaW4gZmlyc3QK YXJndW1lbnQuICBEb2MgZml4LgoobGlzdC1wYWNrYWdlcywgcGFja2FnZS1tZW51LW1vZGUsIHBh Y2thZ2Uta2V5d29yZC1idXR0b24tYWN0aW9uKToKVXBkYXRlIGNhbGxzIHRvIGFib3ZlLgoocGFj a2FnZS1tZW51LWZpbHRlci1jbGVhcik6IFVwZGF0ZSBjYWxscyB0byBhYm92ZSBhbmQgcmVuYW1l IGZyb20KJ3BhY2thZ2UtbWVudS1jbGVhci1maWx0ZXInLgoocGFja2FnZS1tZW51LS1kaXNwbGF5 KTogTmV3IGZ1bmN0aW9uLgoocGFja2FnZS1tZW51LS1nZW5lcmF0ZSk6IFNpbXBsaWZ5LgoKKiB0 ZXN0L2xpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLXRlc3RzLmVsICh3aXRoLXBhY2thZ2UtbWVudS10 ZXN0KToKTmV3IG1hY3JvLgoocGFja2FnZS10ZXN0LXVwZGF0ZS1saXN0aW5nLCBwYWNrYWdlLXRl c3QtbGlzdC1maWx0ZXItYnktbmFtZSk6ClVzZSBhYm92ZSBtYWNyby4KKHBhY2thZ2UtdGVzdC1s aXN0LWZpbHRlci1jbGVhcik6IFJlbmFtZSBmcm9tCidwYWNrYWdlLXRlc3QtbGlzdC1jbGVhci1m aWx0ZXInIGFuZCB1c2UgYWJvdmUgbWFjcm8uCihwYWNrYWdlLXRlc3QtbGlzdC1maWx0ZXItYnkt YXJjaGl2ZSkKKHBhY2thZ2UtdGVzdC1saXN0LWZpbHRlci1ieS1rZXl3b3JkKQoocGFja2FnZS10 ZXN0LWxpc3QtZmlsdGVyLWJ5LXN0YXR1cykKKHBhY2thZ2UtdGVzdC1saXN0LWZpbHRlci1ieS12 ZXJzaW9uKTogTmV3IHRlc3RzLgotLS0KIGRvYy9lbWFjcy9wYWNrYWdlLnRleGkgICAgICAgICAg ICAgICAgfCAgNjMgKysrKy0tLQogZXRjL05FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAyMyArKy0KIGxpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLmVsICAgICAgICAgICAgfCAyNDkg KysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHRlc3QvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2Ut dGVzdHMuZWwgfCAxMDMgKysrKysrKy0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzE5IGluc2VydGlv bnMoKyksIDExOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvcGFja2FnZS50 ZXhpIGIvZG9jL2VtYWNzL3BhY2thZ2UudGV4aQppbmRleCAxYzBmODUzNDI3Li5hZmMxOGU1NjEx IDEwMDY0NAotLS0gYS9kb2MvZW1hY3MvcGFja2FnZS50ZXhpCisrKyBiL2RvYy9lbWFjcy9wYWNr YWdlLnRleGkKQEAgLTE1NywyNyArMTU3LDYgQEAgUGFja2FnZSBNZW51CiBsaXN0IG9mIGF2YWls YWJsZSBwYWNrYWdlcyBmcm9tIHRoZSBwYWNrYWdlIGFyY2hpdmUgYWdhaW4sIGFuZAogcmVkaXNw bGF5cyB0aGUgcGFja2FnZSBsaXN0LgogCi1AaXRlbSAvIGsKLUBraW5kZXggLyBrIEByeyhQYWNr YWdlIE1lbnUpfQotQGZpbmRleCBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LWtleXdvcmQKLUZpbHRl ciB0aGUgcGFja2FnZSBsaXN0IGJ5IGtleXdvcmQKLShAY29kZXtwYWNrYWdlLW1lbnUtZmlsdGVy LWJ5LWtleXdvcmR9KS4gIFRoaXMgcHJvbXB0cyBmb3IgYSBrZXl3b3JkCi0oZS5nLiwgQHNhbXB7 Z2FtZXN9KSwgdGhlbiBzaG93cyBvbmx5IHRoZSBwYWNrYWdlcyB0aGF0IHJlbGF0ZSB0byB0aGF0 Ci1rZXl3b3JkLgotCi1AaXRlbSAvIG4KLUBraW5kZXggLyBuIEByeyhQYWNrYWdlIE1lbnUpfQot QGZpbmRleCBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LW5hbWUKLUZpbHRlciB0aGUgcGFja2FnZSBs aXN0IGJ5IG5hbWUgKEBjb2Rle3BhY2thZ2UtbWVudS1maWx0ZXItYnktbmFtZX0pLgotVGhpcyBw cm9tcHRzIGZvciBhIHN0cmluZywgdGhlbiBzaG93cyBvbmx5IHRoZSBwYWNrYWdlcyB3aG9zZSBu YW1lcwotbWF0Y2ggYSByZWdleHAgd2l0aCB0aGF0IHZhbHVlLgotCi1AaXRlbSAvIC8KLUBraW5k ZXggLyAvIEByeyhQYWNrYWdlIE1lbnUpfQotQGZpbmRleCBwYWNrYWdlLW1lbnUtY2xlYXItZmls dGVyCi1DbGVhciBmaWx0ZXIgY3VycmVudGx5IGFwcGxpZWQgdG8gdGhlIHBhY2thZ2UgbGlzdAot KEBjb2Rle3BhY2thZ2UtbWVudS1jbGVhci1maWx0ZXJ9KS4KLQogQGl0ZW0gSAogQGtpbmRleCBI IEByeyhQYWNrYWdlIE1lbnUpfQogQGZpbmRleCBwYWNrYWdlLW1lbnUtaGlkZS1wYWNrYWdlCkBA IC0xODksNiArMTY4LDQ4IEBAIFBhY2thZ2UgTWVudQogQGZpbmRleCBwYWNrYWdlLW1lbnUtdG9n Z2xlLWhpZGluZwogVG9nZ2xlIHZpc2liaWxpdHkgb2Ygb2xkIHZlcnNpb25zIG9mIHBhY2thZ2Vz IGFuZCBhbHNvIG9mIHZlcnNpb25zCiBmcm9tIGxvd2VyLXByaW9yaXR5IGFyY2hpdmVzIChAY29k ZXtwYWNrYWdlLW1lbnUtdG9nZ2xlLWhpZGluZ30pLgorCitAaXRlbSAvIGEKK0BraW5kZXggLyBh IEByeyhQYWNrYWdlIE1lbnUpfQorQGZpbmRleCBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LWFyY2hp dmUKK0ZpbHRlciBwYWNrYWdlIGxpc3QgYnkgYXJjaGl2ZSAoQGNvZGV7cGFja2FnZS1tZW51LWZp bHRlci1ieS1hcmNoaXZlfSkuCitUaGlzIHByb21wdHMgZm9yIGEgcGFja2FnZSBhcmNoaXZlIChl LmcuLCBAc2FtcHtnbnV9KSwgdGhlbiBzaG93cyBvbmx5CitwYWNrYWdlcyBmcm9tIHRoYXQgYXJj aGl2ZS4KKworQGl0ZW0gLyBrCitAa2luZGV4IC8gayBAcnsoUGFja2FnZSBNZW51KX0KK0BmaW5k ZXggcGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkCitGaWx0ZXIgcGFja2FnZSBsaXN0IGJ5 IGtleXdvcmQgKEBjb2Rle3BhY2thZ2UtbWVudS1maWx0ZXItYnkta2V5d29yZH0pLgorVGhpcyBw cm9tcHRzIGZvciBhIGtleXdvcmQgKGUuZy4sIEBzYW1we2dhbWVzfSksIHRoZW4gc2hvd3Mgb25s eQorcGFja2FnZXMgd2l0aCB0aGF0IGtleXdvcmQuCisKK0BpdGVtIC8gbgorQGtpbmRleCAvIG4g QHJ7KFBhY2thZ2UgTWVudSl9CitAZmluZGV4IHBhY2thZ2UtbWVudS1maWx0ZXItYnktbmFtZQor RmlsdGVyIHBhY2thZ2UgbGlzdCBieSBuYW1lIChAY29kZXtwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5 LW5hbWV9KS4KK1RoaXMgcHJvbXB0cyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24sIHRoZW4gc2hv d3Mgb25seSBwYWNrYWdlcword2l0aCBuYW1lcyBtYXRjaGluZyB0aGF0IHJlZ2V4cC4KKworQGl0 ZW0gLyBzCitAa2luZGV4IC8gcyBAcnsoUGFja2FnZSBNZW51KX0KK0BmaW5kZXggcGFja2FnZS1t ZW51LWZpbHRlci1ieS1zdGF0dXMKK0ZpbHRlciBwYWNrYWdlIGxpc3QgYnkgc3RhdHVzIChAY29k ZXtwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXN0YXR1c30pLgorVGhpcyBwcm9tcHRzIGZvciBvbmUg b3IgbW9yZSBzdGF0dXNlcyAoZS5nLiwgQHNhbXB7YXZhaWxhYmxlfSksIHRoZW4KK3Nob3dzIG9u bHkgcGFja2FnZXMgd2l0aCBtYXRjaGluZyBzdGF0dXMuCisKK0BpdGVtIC8gdgorQGtpbmRleCAv IHYgQHJ7KFBhY2thZ2UgTWVudSl9CitAZmluZGV4IHBhY2thZ2UtbWVudS1maWx0ZXItYnktdmVy c2lvbgorRmlsdGVyIHBhY2thZ2UgbGlzdCBieSB2ZXJzaW9uIChAY29kZXtwYWNrYWdlLW1lbnUt ZmlsdGVyLWJ5LXZlcnNpb259KS4KK1RoaXMgcHJvbXB0cyBmaXJzdCBmb3Igb25lIG9mIHRoZSBx dWFsaWZpZXJzIEBzYW1wezx9LCBAc2FtcHs+fSBvcgorQHNhbXB7PX0sIGFuZCB0aGVuIGEgcGFj a2FnZSB2ZXJzaW9uLCBhbmQgc2hvd3MgcGFja2FnZXMgdGhhdCBoYXMgYQorbG93ZXIsIGVxdWFs IG9yIGhpZ2hlciB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBzcGVjaWZpZWQuCisKK0BpdGVtIC8gLwor QGtpbmRleCAvIC8gQHJ7KFBhY2thZ2UgTWVudSl9CitAZmluZGV4IHBhY2thZ2UtbWVudS1maWx0 ZXItY2xlYXIKK0NsZWFyIGZpbHRlciBjdXJyZW50bHkgYXBwbGllZCB0byB0aGUgcGFja2FnZSBs aXN0CisoQGNvZGV7cGFja2FnZS1tZW51LWZpbHRlci1jbGVhcn0pLgogQGVuZCB0YWJsZQogCiBA bm9pbmRlbnQKZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggY2I3M2U0NjM1 OC4uMmEzYjZmMmMxZSAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTEx OTksMTQgKzExOTksMjEgQEAgZWFybHkgaW5pdCBmaWxlLgogKioqIE5ldyBmdW5jdGlvbiAncGFj a2FnZS1hY3RpdmF0ZS1hbGwnLgogCiArKysKLSoqKiBOZXcgZnVuY3Rpb25zIGZvciBmaWx0ZXJp bmcgcGFja2FnZXMgbGlzdC4KLUEgbmV3IGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHdoaWNoIGFs bG93cyB1c2VycyB0byBmaWx0ZXIgdGhlCi1wYWNrYWdlcyBsaXN0IGJ5IG5hbWU6ICdwYWNrYWdl LW1lbnUtZmlsdGVyLWJ5LW5hbWUnLiAgQnkgZGVmYXVsdCwgaXQKLWlzIGJvdW5kIHRvICcvIG4n LiAgQWRkaXRpb25hbGx5LCB0aGUgZnVuY3Rpb24KLSdwYWNrYWdlLW1lbnUtZml0ZXItYnkta2V5 d29yZCcgaGFzIGJlZW4gcmVuYW1lZCBmcm9tCi0ncGFja2FnZS1tZW51LWZpbHRlcicuICBJdHMg a2V5YmluZGluZyBoYXMgYWxzbyBiZWVuIGNoYW5nZWQgdG8gJy8gaycKLShmcm9tICdmJykuICBU byBjbGVhciBhbnkgb2YgdGhlIHR3byBmaWx0ZXJzLCB0aGUgdXNlciBjYW4gbm93IGNhbGwKLXRo ZSAncGFja2FnZS1tZW51LWNsZWFyLWZpbHRlcicgZnVuY3Rpb24sIGJvdW5kIHRvICcvIC8nIGJ5 IGRlZmF1bHQuCisqKiogTmV3IGZ1bmN0aW9ucyBmb3IgZmlsdGVyaW5nIHRoZSBwYWNrYWdlIGxp c3QuCitUaGUgbmV3IGtleSBiaW5kaW5ncyBhcmUgYXMgZm9sbG93czoKKwora2V5ICAgICAgICAg ICAgIGJpbmRpbmcKKy0tLSAgICAgICAgICAgICAtLS0tLS0tCisvIGEgICAgICAgICAgICAgcGFj a2FnZS1tZW51LWZpbHRlci1ieS1hcmNoaXZlCisvIGsgICAgICAgICAgICAgcGFja2FnZS1tZW51 LWZpbHRlci1ieS1rZXl3b3JkCisvIG4gICAgICAgICAgICAgcGFja2FnZS1tZW51LWZpbHRlci1i eS1uYW1lCisvIHMgICAgICAgICAgICAgcGFja2FnZS1tZW51LWZpbHRlci1ieS1zdGF0dXMKKy8g diAgICAgICAgICAgICBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXZlcnNpb24KKy8gLyAgICAgICAg ICAgICBwYWNrYWdlLW1lbnUtZmlsdGVyLWNsZWFyCisKK1RoZSBmdW5jdGlvbiB0aGF0IHdhcyBw cmV2aW91c2x5IG5hbWVkICdwYWNrYWdlLW1lbnUtZmlsdGVyJyBoYXMgYmVlbgorcmVuYW1lZCB0 byAncGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkJy4gIEl0IGlzIG5vIGxvbmdlciBib3Vu ZCB0bworJ2YnIGluIHRoZSBwYWNrYWdlIGJ1ZmZlciwgYnV0IGluc3RlYWQgdG8gJy8gbicgYXMg c2hvd24gYWJvdmUuCiAKIC0tLQogKioqIEltZW51IHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgdG8g J3BhY2thZ2UtbWVudS1tb2RlJy4KZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC9wYWNrYWdl LmVsIGIvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWwKaW5kZXggNTZlMTYwMjMyZC4uNjI3NDc2 NmVmNyAxMDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWwKKysrIGIvbGlzcC9l bWFjcy1saXNwL3BhY2thZ2UuZWwKQEAgLTI2NDQsNyArMjY0NCw3IEBAIHBhY2thZ2Uta2V5d29y ZC1idXR0b24tYWN0aW9uCiBVc2VkIGZvciB0aGUgYGFjdGlvbicgcHJvcGVydHkgb2YgYnV0dG9u cyBpbiB0aGUgYnVmZmVyIGNyZWF0ZWQgYnkKIGBkZXNjcmliZS1wYWNrYWdlJy4iCiAgIChsZXQg KChwa2cta2V5d29yZCAoYnV0dG9uLWdldCBidXR0b24gJ3BhY2thZ2Uta2V5d29yZCkpKQotICAg IChwYWNrYWdlLXNob3ctcGFja2FnZS1saXN0IHQgKGxpc3QgcGtnLWtleXdvcmQpKSkpCisgICAg KHBhY2thZ2Utc2hvdy1wYWNrYWdlLWxpc3QgbmlsIChsaXN0IHBrZy1rZXl3b3JkKSkpKQogCiAo ZGVmdW4gcGFja2FnZS1tYWtlLWJ1dHRvbiAodGV4dCAmcmVzdCBwcm9wZXJ0aWVzKQogICAiSW5z ZXJ0IGJ1dHRvbiBsYWJlbGVkIFRFWFQgd2l0aCBidXR0b24gUFJPUEVSVElFUyBhdCBwb2ludC4K QEAgLTI2OTAsMTUgKzI2OTAsMTggQEAgcGFja2FnZS1tZW51LW1vZGUtbWFwCiAgICAgKGRlZmlu ZS1rZXkgbWFwICJpIiAncGFja2FnZS1tZW51LW1hcmstaW5zdGFsbCkKICAgICAoZGVmaW5lLWtl eSBtYXAgIlUiICdwYWNrYWdlLW1lbnUtbWFyay11cGdyYWRlcykKICAgICAoZGVmaW5lLWtleSBt YXAgInIiICdyZXZlcnQtYnVmZmVyKQotICAgIChkZWZpbmUta2V5IG1hcCAoa2JkICIvIGsiKSAn cGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkKQotICAgIChkZWZpbmUta2V5IG1hcCAoa2Jk ICIvIG4iKSAncGFja2FnZS1tZW51LWZpbHRlci1ieS1uYW1lKQotICAgIChkZWZpbmUta2V5IG1h cCAoa2JkICIvIC8iKSAncGFja2FnZS1tZW51LWNsZWFyLWZpbHRlcikKICAgICAoZGVmaW5lLWtl eSBtYXAgIn4iICdwYWNrYWdlLW1lbnUtbWFyay1vYnNvbGV0ZS1mb3ItZGVsZXRpb24pCiAgICAg KGRlZmluZS1rZXkgbWFwICJ4IiAncGFja2FnZS1tZW51LWV4ZWN1dGUpCiAgICAgKGRlZmluZS1r ZXkgbWFwICJoIiAncGFja2FnZS1tZW51LXF1aWNrLWhlbHApCiAgICAgKGRlZmluZS1rZXkgbWFw ICJIIiAjJ3BhY2thZ2UtbWVudS1oaWRlLXBhY2thZ2UpCiAgICAgKGRlZmluZS1rZXkgbWFwICI/ IiAncGFja2FnZS1tZW51LWRlc2NyaWJlLXBhY2thZ2UpCiAgICAgKGRlZmluZS1rZXkgbWFwICIo IiAjJ3BhY2thZ2UtbWVudS10b2dnbGUtaGlkaW5nKQorICAgIChkZWZpbmUta2V5IG1hcCAoa2Jk ICIvIC8iKSAncGFja2FnZS1tZW51LWZpbHRlci1jbGVhcikKKyAgICAoZGVmaW5lLWtleSBtYXAg KGtiZCAiLyBhIikgJ3BhY2thZ2UtbWVudS1maWx0ZXItYnktYXJjaGl2ZSkKKyAgICAoZGVmaW5l LWtleSBtYXAgKGtiZCAiLyBrIikgJ3BhY2thZ2UtbWVudS1maWx0ZXItYnkta2V5d29yZCkKKyAg ICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiLyBuIikgJ3BhY2thZ2UtbWVudS1maWx0ZXItYnktbmFt ZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiLyBzIikgJ3BhY2thZ2UtbWVudS1maWx0ZXIt Ynktc3RhdHVzKQorICAgIChkZWZpbmUta2V5IG1hcCAoa2JkICIvIHYiKSAncGFja2FnZS1tZW51 LWZpbHRlci1ieS12ZXJzaW9uKQogICAgIG1hcCkKICAgIkxvY2FsIGtleW1hcCBmb3IgYHBhY2th Z2UtbWVudS1tb2RlJyBidWZmZXJzLiIpCiAKQEAgLTI3MjUsOSArMjcyOCwxMiBAQCBwYWNrYWdl LW1lbnUtbW9kZS1tZW51CiAKICAgICAiLS0iCiAgICAgKCJGaWx0ZXIgUGFja2FnZXMiCisgICAg IFsiRmlsdGVyIGJ5IEFyY2hpdmUiIHBhY2thZ2UtbWVudS1maWx0ZXItYnktYXJjaGl2ZSA6aGVs cCAiRmlsdGVyIHBhY2thZ2VzIGJ5IGFyY2hpdmUiXQogICAgICBbIkZpbHRlciBieSBLZXl3b3Jk IiBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LWtleXdvcmQgOmhlbHAgIkZpbHRlciBwYWNrYWdlcyBi eSBrZXl3b3JkIl0KICAgICAgWyJGaWx0ZXIgYnkgTmFtZSIgcGFja2FnZS1tZW51LWZpbHRlci1i eS1uYW1lIDpoZWxwICJGaWx0ZXIgcGFja2FnZXMgYnkgbmFtZSJdCi0gICAgIFsiQ2xlYXIgRmls dGVyIiBwYWNrYWdlLW1lbnUtY2xlYXItZmlsdGVyIDpoZWxwICJDbGVhciBwYWNrYWdlIGxpc3Qg ZmlsdGVyIl0pCisgICAgIFsiRmlsdGVyIGJ5IFN0YXR1cyIgcGFja2FnZS1tZW51LWZpbHRlci1i eS1zdGF0dXMgOmhlbHAgIkZpbHRlciBwYWNrYWdlcyBieSBzdGF0dXMiXQorICAgICBbIkZpbHRl ciBieSBWZXJzaW9uIiBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXZlcnNpb24gOmhlbHAgIkZpbHRl ciBwYWNrYWdlcyBieSB2ZXJzaW9uIl0KKyAgICAgWyJDbGVhciBGaWx0ZXIiIHBhY2thZ2UtbWVu dS1maWx0ZXItY2xlYXIgOmhlbHAgIkNsZWFyIHBhY2thZ2UgbGlzdCBmaWx0ZXIiXSkKIAogICAg IFsiSGlkZSBieSBSZWdleHAiIHBhY2thZ2UtbWVudS1oaWRlLXBhY2thZ2UgOmhlbHAgIlBlcm1h bmVudGx5IGhpZGUgYWxsIHBhY2thZ2VzIG1hdGNoaW5nIGEgcmVnZXhwIl0KICAgICBbIkRpc3Bs YXkgT2xkZXIgVmVyc2lvbnMiIHBhY2thZ2UtbWVudS10b2dnbGUtaGlkaW5nCkBAIC0yNzYxLDcg KzI3NjcsNyBAQCBwYWNrYWdlLW1lbnUtbW9kZQogICAgICAgICAgICgiRGVzY3JpcHRpb24iIDAg cGFja2FnZS1tZW51LS1kZXNjcmlwdGlvbi1wcmVkaWNhdGUpXSkKICAgKHNldHEgdGFidWxhdGVk LWxpc3QtcGFkZGluZyAyKQogICAoc2V0cSB0YWJ1bGF0ZWQtbGlzdC1zb3J0LWtleSAoY29ucyAi U3RhdHVzIiBuaWwpKQotICAoYWRkLWhvb2sgJ3RhYnVsYXRlZC1saXN0LXJldmVydC1ob29rICMn cGFja2FnZS1tZW51LS1yZWZyZXNoIG5pbCB0KQorICAoYWRkLWhvb2sgJ3RhYnVsYXRlZC1saXN0 LXJldmVydC1ob29rICMncGFja2FnZS1tZW51LS1yZWZyZXNoKQogICAodGFidWxhdGVkLWxpc3Qt aW5pdC1oZWFkZXIpCiAgIChzZXRxIHJldmVydC1idWZmZXItZnVuY3Rpb24gJ3BhY2thZ2UtbWVu dS0tcmVmcmVzaC1jb250ZW50cykKICAgKHNldGYgaW1lbnUtcHJldi1pbmRleC1wb3NpdGlvbi1m dW5jdGlvbgpAQCAtMjkyNywxNyArMjkzMywxOSBAQCBwYWNrYWdlLWhpZGRlbi1yZWdleHBzCiAg IDp0eXBlICcocmVwZWF0IChyZWdleHAgOnRhZyAiSGlkZSBwYWNrYWdlcyB3aXRoIG5hbWUgbWF0 Y2hpbmciKSkpCiAKIChkZWZ1biBwYWNrYWdlLW1lbnUtLXJlZnJlc2ggKCZvcHRpb25hbCBwYWNr YWdlcyBrZXl3b3JkcykKLSAgIlJlLXBvcHVsYXRlIHRoZSBgdGFidWxhdGVkLWxpc3QtZW50cmll cycuCi1QQUNLQUdFUyBzaG91bGQgYmUgbmlsIG9yIHQsIHdoaWNoIG1lYW5zIHRvIGRpc3BsYXkg YWxsIGtub3duIHBhY2thZ2VzLgotS0VZV09SRFMgc2hvdWxkIGJlIG5pbCBvciBhIGxpc3Qgb2Yg a2V5d29yZHMuIgorICAiUmUtcG9wdWxhdGUgYHRhYnVsYXRlZC1saXN0LWVudHJpZXMnIHdpdGgg YWxsIGtub3duIHBhY2thZ2VzLgorV2l0aCBvcHRpb25hbCBhcmd1bWVudCBQQUNLQUdFUywgYSBs aXN0IG9mIHBhY2thZ2UKK25hbWVzIChzeW1ib2xzKSwgYWRkIG9ubHkgcGFja2FnZXMgd2l0aCBt YXRjaGluZyBuYW1lcy4KKworV2l0aCBvcHRpb25hbCBhcmd1bWVudCBLRVlXT1JEUywgYSBsaXN0 IG9mIGtleXdvcmRzIGFzIHN5bWJvbHMsCithZGQgb25seSBwYWNrYWdlcyB3aXRoIG1hdGNoaW5n IGtleXdvcmRzLiIKICAgOzsgQ29uc3RydWN0IGxpc3Qgb2YgKFBLRy1ERVNDIC4gU1RBVFVTKS4K LSAgKHVubGVzcyBwYWNrYWdlcyAoc2V0cSBwYWNrYWdlcyB0KSkKICAgKGxldCAoKGhpZGRlbi1u YW1lcyAobWFwY29uY2F0ICMnaWRlbnRpdHkgcGFja2FnZS1oaWRkZW4tcmVnZXhwcyAiXFx8Iikp CiAgICAgICAgIGluZm8tbGlzdCkKICAgICA7OyBJbnN0YWxsZWQgcGFja2FnZXM6CiAgICAgKGRv bGlzdCAoZWx0IHBhY2thZ2UtYWxpc3QpCiAgICAgICAobGV0ICgobmFtZSAoY2FyIGVsdCkpKQot ICAgICAgICAod2hlbiAob3IgKGVxIHBhY2thZ2VzIHQpIChtZW1xIG5hbWUgcGFja2FnZXMpKQor ICAgICAgICAod2hlbiAob3IgKG5vdCBwYWNrYWdlcykgKG1lbXEgbmFtZSBwYWNrYWdlcykpCiAg ICAgICAgICAgKGRvbGlzdCAocGtnIChjZHIgZWx0KSkKICAgICAgICAgICAgICh3aGVuIChwYWNr YWdlLS1oYXMta2V5d29yZC1wIHBrZyBrZXl3b3JkcykKICAgICAgICAgICAgICAgKHB1c2ggcGtn IGluZm8tbGlzdCkpKSkpKQpAQCAtMjk1MCw3ICsyOTU4LDcgQEAgcGFja2FnZS1tZW51LS1yZWZy ZXNoCiAgICAgICAgICAgKHdoZW4gKGFuZCAocGFja2FnZS0taGFzLWtleXdvcmQtcCBwa2cga2V5 d29yZHMpCiAgICAgICAgICAgICAgICAgICAgICAob3IgcGFja2FnZS1saXN0LXVudmVyc2lvbmVk CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtLWJpLWRlc2MtdmVyc2lvbiAoY2Ry IGVsdCkpKQotICAgICAgICAgICAgICAgICAgICAgKG9yIChlcSBwYWNrYWdlcyB0KSAobWVtcSBu YW1lIHBhY2thZ2VzKSkpCisgICAgICAgICAgICAgICAgICAgICAob3IgKG5vdCBwYWNrYWdlcykg KG1lbXEgbmFtZSBwYWNrYWdlcykpKQogICAgICAgICAgICAgKHB1c2ggcGtnIGluZm8tbGlzdCkp KSkpCiAKICAgICA7OyBBdmFpbGFibGUgYW5kIGRpc2FibGVkIHBhY2thZ2VzOgpAQCAtMjk1OSw3 ICsyOTY3LDcgQEAgcGFja2FnZS1tZW51LS1yZWZyZXNoCiAgICAgKGRvbGlzdCAoZWx0IHBhY2th Z2UtYXJjaGl2ZS1jb250ZW50cykKICAgICAgIChsZXQgKChuYW1lIChjYXIgZWx0KSkpCiAgICAg ICAgIDs7IFRvIGJlIGRpc3BsYXllZCBpdCBtdXN0IGJlIGluIFBBQ0tBR0VTOwotICAgICAgICAo d2hlbiAoYW5kIChvciAoZXEgcGFja2FnZXMgdCkgKG1lbXEgbmFtZSBwYWNrYWdlcykpCisgICAg ICAgICh3aGVuIChhbmQgKG9yIChub3QgcGFja2FnZXMpIChtZW1xIG5hbWUgcGFja2FnZXMpKQog ICAgICAgICAgICAgICAgICAgIDs7IGFuZCB3ZSBtdXN0IGVpdGhlciBub3QgYmUgaGlkaW5nIGFu eXRoaW5nLAogICAgICAgICAgICAgICAgICAgIChvciAobm90IHBhY2thZ2UtbWVudS0taGlkZS1w YWNrYWdlcykKICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCBwYWNrYWdlLWhpZGRlbi1yZWdl eHBzKQpAQCAtMjk3MCw3ICsyOTc4LDcgQEAgcGFja2FnZS1tZW51LS1yZWZyZXNoCiAgICAgICAg ICAgICAod2hlbiAocGFja2FnZS0taGFzLWtleXdvcmQtcCBwa2cga2V5d29yZHMpCiAgICAgICAg ICAgICAgIChwdXNoIHBrZyBpbmZvLWxpc3QpKSkpKSkKIAotICAgIDs7IFByaW50IHRoZSByZXN1 bHQuCisgICAgOzsgU2V0IGB0YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzJy4KICAgICAodGFidWxhdGVk LWxpc3QtaW5pdC1oZWFkZXIpCiAgICAgKHNldHEgdGFidWxhdGVkLWxpc3QtZW50cmllcwogICAg ICAgICAgIChtYXBjYXIgIydwYWNrYWdlLW1lbnUtLXByaW50LWluZm8tc2ltcGxlIGluZm8tbGlz dCkpKSkKQEAgLTMwMzEsMjMgKzMwMzksMzAgQEAgcGFja2FnZS0taGFzLWtleXdvcmQtcAogICAg ICAgICBmb3VuZCkKICAgICB0KSkKIAotKGRlZnVuIHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgKHJl bWVtYmVyLXBvcyBwYWNrYWdlcyAmb3B0aW9uYWwga2V5d29yZHMpCi0gICJQb3B1bGF0ZSB0aGUg UGFja2FnZSBNZW51LgorKGRlZnVuIHBhY2thZ2UtbWVudS0tZGlzcGxheSAocmVtZW1iZXItcG9z IHN1ZmZpeCkKKyAgIkRpc3BsYXkgdGhlIFBhY2thZ2UgTWVudS4KIElmIFJFTUVNQkVSLVBPUyBp cyBub24tbmlsLCBrZWVwIHBvaW50IG9uIHRoZSBzYW1lIGVudHJ5LgotUEFDS0FHRVMgc2hvdWxk IGJlIHQsIHdoaWNoIG1lYW5zIHRvIGRpc3BsYXkgYWxsIGtub3duIHBhY2thZ2VzLAotb3IgYSBs aXN0IG9mIHBhY2thZ2UgbmFtZXMgKHN5bWJvbHMpIHRvIGRpc3BsYXkuCiAKLVdpdGggS0VZV09S RFMgZ2l2ZW4sIG9ubHkgcGFja2FnZXMgd2l0aCB0aG9zZSBrZXl3b3JkcyBhcmUKLXNob3duLiIK LSAgKHBhY2thZ2UtbWVudS0tcmVmcmVzaCBwYWNrYWdlcyBrZXl3b3JkcykKK0lmIFNVRkZJWCBp cyBub24tbmlsLCBhcHBlbmQgdGhhdCB0byBcIlBhY2thZ2VcIiBmb3IgdGhlIGZpcnN0Citjb2x1 bW4gaW4gdGhlIGhlYWRlciBsaW5lLiIKICAgKHNldGYgKGNhciAoYXJlZiB0YWJ1bGF0ZWQtbGlz dC1mb3JtYXQgMCkpCi0gICAgICAgIChpZiBrZXl3b3JkcwotICAgICAgICAgICAgKGxldCAoKGZp bHRlcnMgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IGtleXdvcmRzICIsIikpKQotICAgICAgICAgICAg ICAoY29uY2F0ICJQYWNrYWdlWyIgZmlsdGVycyAiXSIpKQorICAgICAgICAoaWYgc3VmZml4Cisg ICAgICAgICAgICAoY29uY2F0ICJQYWNrYWdlWyIgc3VmZml4ICJdIikKICAgICAgICAgICAiUGFj a2FnZSIpKQogICAodGFidWxhdGVkLWxpc3QtaW5pdC1oZWFkZXIpCiAgICh0YWJ1bGF0ZWQtbGlz dC1wcmludCByZW1lbWJlci1wb3MpKQogCisoZGVmdW4gcGFja2FnZS1tZW51LS1nZW5lcmF0ZSAo cmVtZW1iZXItcG9zICZvcHRpb25hbCBwYWNrYWdlcyBrZXl3b3JkcykKKyAgIlBvcHVsYXRlIGFu ZCBkaXNwbGF5IHRoZSBQYWNrYWdlIE1lbnUuCitJZiBSRU1FTUJFUi1QT1MgaXMgbm9uLW5pbCwg a2VlcCBwb2ludCBvbiB0aGUgc2FtZSBlbnRyeS4KKworQXJndW1lbnRzIFBBQ0tBR0VTIGFuZCBL RVlXT1JEUyBhcmUgbGlrZSBgcGFja2FnZS1tZW51LS1yZWZyZXNoJy4iCisgIChwYWNrYWdlLW1l bnUtLXJlZnJlc2ggcGFja2FnZXMga2V5d29yZHMpCisgIChwYWNrYWdlLW1lbnUtLWRpc3BsYXkg cmVtZW1iZXItcG9zCisgICAgICAgICAgICAgICAgICAod2hlbiBrZXl3b3JkcworICAgICAgICAg ICAgICAgICAgICAobGV0ICgoZmlsdGVycyAobWFwY29uY2F0ICMnaWRlbnRpdHkga2V5d29yZHMg IiwiKSkpCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiUGFja2FnZVsiIGZpbHRlcnMg Il0iKSkpKSkKKwogKGRlZnVuIHBhY2thZ2UtbWVudS0tcHJpbnQtaW5mbyAocGtnKQogICAiUmV0 dXJuIGEgcGFja2FnZSBlbnRyeSBzdWl0YWJsZSBmb3IgYHRhYnVsYXRlZC1saXN0LWVudHJpZXMn LgogUEtHIGhhcyB0aGUgZm9ybSAoUEtHLURFU0MgLiBTVEFUVVMpLgpAQCAtMzY1NSw3ICszNjcw LDcgQEAgbGlzdC1wYWNrYWdlcwogCiAgICAgICA7OyBJZiB3ZSdyZSBub3QgYXN5bmMsIHRoaXMg d291bGQgYmUgcmVkdW5kYW50LgogICAgICAgKHdoZW4gcGFja2FnZS1tZW51LWFzeW5jCi0gICAg ICAgIChwYWNrYWdlLW1lbnUtLWdlbmVyYXRlIG5pbCB0KSkpCisgICAgICAgIChwYWNrYWdlLW1l bnUtLWdlbmVyYXRlIG5pbCkpKQogICAgIDs7IFRoZSBwYWNrYWdlIG1lbnUgYnVmZmVyIGhhcyBr ZXliaW5kaW5ncy4gIElmIHRoZSB1c2VyIHR5cGVzCiAgICAgOzsgYE0teCBsaXN0LXBhY2thZ2Vz JywgdGhhdCBzdWdnZXN0cyBpdCBzaG91bGQgYmVjb21lIGN1cnJlbnQuCiAgICAgKHN3aXRjaC10 by1idWZmZXIgYnVmKSkpCkBAIC0zNjgzLDUxICszNjk4LDE2NCBAQCBwYWNrYWdlLXNob3ctcGFj a2FnZS1saXN0CiAgICAgICAgIChzZWxlY3Qtd2luZG93IHdpbikKICAgICAgIChzd2l0Y2gtdG8t YnVmZmVyIGJ1ZikpKSkKIAorKGRlZnVuIHBhY2thZ2UtbWVudS0tZmlsdGVyLWJ5IChwcmVkaWNh dGUgc3VmZml4KQorICAiRmlsdGVyIFwiKlBhY2thZ2VzKlwiIGJ1ZmZlciBieSBQUkVESUNBVEUs IGFuZCBhZGQgREVTQyB0byBoZWFkZXIuCitQUkVESUNBVEUgaXMgYSBmdW5jdGlvbiB3aGljaCB3 aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgYQorYHBhY2thZ2UtZGVzYycgb2JqZWN0 LCBhbmQgcmV0dXJucyB0IGlmIHRoYXQgb2JqZWN0IHNob3VsZCBiZQorbGlzdGVkIGluIHRoZSBQ YWNrYWdlIE1lbnUuCisKK1NVRkZJWCBpcyBwYXNzZWQgb24gdG8gYHBhY2thZ2UtbWVudS0tZGlz cGxheScgYW5kIGlzIGFkZGVkIHRvCit0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIGZpcnN0IGNvbHVt bi4iCisgIDs7IFVwZGF0ZSBgdGFidWxhdGVkLWxpc3QtZW50cmllcycgc28gdGhhdCBpdCBjb250 YWlucyBhbGwKKyAgOzsgcGFja2FnZXMgYmVmb3JlIHNlYXJjaGluZy4KKyAgKHBhY2thZ2UtbWVu dS0tcmVmcmVzaCkKKyAgKGxldCAoZm91bmQtZW50cmllcykKKyAgICAoZG9saXN0IChlbnRyeSB0 YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzKQorICAgICAgKHdoZW4gKGZ1bmNhbGwgcHJlZGljYXRlIChj YXIgZW50cnkpKQorICAgICAgICAocHVzaCBlbnRyeSBmb3VuZC1lbnRyaWVzKSkpCisgICAgKGlm IGZvdW5kLWVudHJpZXMKKyAgICAgICAgKHByb2duCisgICAgICAgICAgKHNldHEgdGFidWxhdGVk LWxpc3QtZW50cmllcyBmb3VuZC1lbnRyaWVzKQorICAgICAgICAgIChwYWNrYWdlLW1lbnUtLWRp c3BsYXkgdCBzdWZmaXgpKQorICAgICAgKHVzZXItZXJyb3IgIk5vIHBhY2thZ2VzIGZvdW5kIikp KSkKKworKGRlZnVuIHBhY2thZ2UtbWVudS1maWx0ZXItYnktYXJjaGl2ZSAoYXJjaGl2ZSkKKyAg IkZpbHRlciB0aGUgXCIqUGFja2FnZXMqXCIgYnVmZmVyIGJ5IEFSQ0hJVkUuCitEaXNwbGF5IG9u bHkgcGFja2FnZXMgZnJvbSBwYWNrYWdlIGFyY2hpdmUgQVJDSElWRS4KKworV2hlbiBjYWxsZWQg aW50ZXJhY3RpdmVseSwgcHJvbXB0IGZvciBBUkNISVZFLCB3aGljaCBjYW4gYmUgYQorY29tbWEt c2VwYXJhdGVkIHN0cmluZy4gIElmIEFSQ0hJVkUgaXMgZW1wdHksIHNob3cgYWxsIHBhY2thZ2Vz LgorCitXaGVuIGNhbGxlZCBmcm9tIExpc3AsIEFSQ0hJVkUgY2FuIGJlIGEgc3RyaW5nIG9yIGEg bGlzdCBvZgorc3RyaW5ncy4gIElmIEFSQ0hJVkUgaXMgbmlsIG9yIHRoZSBlbXB0eSBzdHJpbmcs IHNob3cgYWxsCitwYWNrYWdlcy4iCisgIChpbnRlcmFjdGl2ZSAobGlzdCAoY29tcGxldGluZy1y ZWFkLW11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBieSBhcmNoaXZlIChj b21tYSBzZXBhcmF0ZWQpOiAiCisgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAjJ2NhciBw YWNrYWdlLWFyY2hpdmVzKSkpKQorICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2Rl KQorICAobGV0ICgocmUgKGlmIChsaXN0cCBhcmNoaXZlKQorICAgICAgICAgICAgICAgIChyZWdl eHAtb3B0IGFyY2hpdmUpCisgICAgICAgICAgICAgIGFyY2hpdmUpKSkKKyAgICAocGFja2FnZS1t ZW51LS1maWx0ZXItYnkgKGxhbWJkYSAocGtnLWRlc2MpCisgICAgICAgICAgICAgICAgICAgICAg ICAobGV0ICgocGtnLWFyY2hpdmUgKHBhY2thZ2UtZGVzYy1hcmNoaXZlIHBrZy1kZXNjKSkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgcGtnLWFyY2hpdmUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgcmUgcGtnLWFyY2hpdmUpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiYXJjaGl2ZToiIChpZiAobGlzdHAgYXJjaGl2ZSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctam9p biBhcmNoaXZlICIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhcmNoaXZlKSkpKSkKKwogKGRlZnVuIHBhY2thZ2UtbWVudS1maWx0ZXItYnkta2V5d29yZCAo a2V5d29yZCkKICAgIkZpbHRlciB0aGUgXCIqUGFja2FnZXMqXCIgYnVmZmVyIGJ5IEtFWVdPUkQu Ci1TaG93IG9ubHkgdGhvc2UgaXRlbXMgdGhhdCByZWxhdGUgdG8gdGhlIHNwZWNpZmllZCBLRVlX T1JELgotCi1LRVlXT1JEIGNhbiBiZSBhIHN0cmluZyBvciBhIGxpc3Qgb2Ygc3RyaW5ncy4gIElm IGl0IGlzIGEgbGlzdCwgYQotcGFja2FnZSB3aWxsIGJlIGRpc3BsYXllZCBpZiBpdCBtYXRjaGVz IGFueSBvZiB0aGUga2V5d29yZHMuCi1JbnRlcmFjdGl2ZWx5LCBpdCBpcyBhIGxpc3Qgb2Ygc3Ry aW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzLgotCi1LRVlXT1JEIGNhbiBhbHNvIGJlIHVzZWQgdG8g ZmlsdGVyIGJ5IHN0YXR1cyBvciBhcmNoaXZlIG5hbWUgYnkKLXVzaW5nIGtleXdvcmRzIGxpa2Ug XCJhcmM6Z251XCIgYW5kIFwic3RhdHVzOmF2YWlsYWJsZVwiLgotU3RhdHVzZXMgYXZhaWxhYmxl IGluY2x1ZGUgXCJpbmNvbXBhdFwiLCBcImF2YWlsYWJsZVwiLAotXCJidWlsdC1pblwiIGFuZCBc Imluc3RhbGxlZFwiLiIKLSAgKGludGVyYWN0aXZlCi0gICAobGlzdCAoY29tcGxldGluZy1yZWFk LW11bHRpcGxlCi0gICAgICAgICAgIktleXdvcmRzIChjb21tYSBzZXBhcmF0ZWQpOiAiIChwYWNr YWdlLWFsbC1rZXl3b3JkcykpKSkKK0Rpc3BsYXkgb25seSBwYWNrYWdlcyB3aXRoIHNwZWNpZmll ZCBLRVlXT1JELgorCitXaGVuIGNhbGxlZCBpbnRlcmFjdGl2ZWx5LCBwcm9tcHQgZm9yIEtFWVdP UkQsIHdoaWNoIGNhbiBiZSBhCitjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLiAgSWYgS0VZV09SRCBp cyBlbXB0eSwgc2hvdyBhbGwgcGFja2FnZXMuCisKK1doZW4gY2FsbGVkIGZyb20gTGlzcCwgS0VZ V09SRCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBsaXN0IG9mCitzdHJpbmdzLiAgSWYgS0VZV09SRCBp cyBuaWwgb3IgdGhlIGVtcHR5IHN0cmluZywgc2hvdyBhbGwKK3BhY2thZ2VzLiIKKyAgKGludGVy YWN0aXZlIChsaXN0IChjb21wbGV0aW5nLXJlYWQtbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAg ICAgICAiS2V5d29yZHMgKGNvbW1hIHNlcGFyYXRlZCk6ICIKKyAgICAgICAgICAgICAgICAgICAg ICAocGFja2FnZS1hbGwta2V5d29yZHMpKSkpCisgICh3aGVuIChzdHJpbmdwIGtleXdvcmQpCisg ICAgKHNldHEga2V5d29yZCAobGlzdCBrZXl3b3JkKSkpCiAgIChwYWNrYWdlLS1lbnN1cmUtcGFj a2FnZS1tZW51LW1vZGUpCi0gIChwYWNrYWdlLXNob3ctcGFja2FnZS1saXN0IHQgKGlmIChzdHJp bmdwIGtleXdvcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGtl eXdvcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkKSkpCisgIChp ZiAobm90IGtleXdvcmQpCisgICAgICAocGFja2FnZS1tZW51LS1nZW5lcmF0ZSB0KQorICAgIChw YWNrYWdlLW1lbnUtLWZpbHRlci1ieSAobGFtYmRhIChwa2ctZGVzYykKKyAgICAgICAgICAgICAg ICAgICAgICAgIChwYWNrYWdlLS1oYXMta2V5d29yZC1wIHBrZy1kZXNjIGtleXdvcmQpKQorICAg ICAgICAgICAgICAgICAgICAgIChjb25jYXQgImtleXdvcmQ6IiAoc3RyaW5nLWpvaW4ga2V5d29y ZCAiLCIpKSkpKQogCiAoZGVmdW4gcGFja2FnZS1tZW51LWZpbHRlci1ieS1uYW1lIChuYW1lKQot ICAiRmlsdGVyIHRoZSBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgTkFNRS4KLVNob3cgb25seSB0 aG9zZSBpdGVtcyB3aG9zZSBuYW1lIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgotTkFN RS4gIElmIE5BTUUgaXMgbmlsIG9yIHRoZSBlbXB0eSBzdHJpbmcsIHNob3cgYWxsIHBhY2thZ2Vz LiIKLSAgKGludGVyYWN0aXZlIChsaXN0IChyZWFkLWZyb20tbWluaWJ1ZmZlciAiRmlsdGVyIGJ5 IG5hbWUgKHJlZ2V4cCk6ICIpKSkKKyAgIkZpbHRlciB0aGUgXCIqUGFja2FnZXMqXCIgYnVmZmVy IGJ5IE5BTUUgcmVnZXhwLgorRGlzcGxheSBvbmx5IHBhY2thZ2VzIHdpdGggbmFtZSB0aGF0IG1h dGNoZXMgcmVnZXhwIE5BTUUuCisKK1doZW4gY2FsbGVkIGludGVyYWN0aXZlbHksIHByb21wdCBm b3IgTkFNRS4KKworSWYgTkFNRSBpcyBuaWwgb3IgdGhlIGVtcHR5IHN0cmluZywgc2hvdyBhbGwg cGFja2FnZXMuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKHJlYWQtcmVnZXhwICJGaWx0ZXIgYnkg bmFtZSAocmVnZXhwKSIpKSkKICAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdlLW1lbnUtbW9kZSkK ICAgKGlmIChvciAobm90IG5hbWUpIChzdHJpbmctZW1wdHktcCBuYW1lKSkKLSAgICAgIChwYWNr YWdlLXNob3ctcGFja2FnZS1saXN0IHQgbmlsKQotICAgIDs7IFVwZGF0ZSBgdGFidWxhdGVkLWxp c3QtZW50cmllcycgc28gdGhhdCBpdCBjb250YWlucyBhbGwKLSAgICA7OyBwYWNrYWdlcyBiZWZv cmUgc2VhcmNoaW5nLgotICAgIChwYWNrYWdlLW1lbnUtLXJlZnJlc2ggdCBuaWwpCi0gICAgKGxl dCAobWF0Y2hlZCkKLSAgICAgIChkb2xpc3QgKGVudHJ5IHRhYnVsYXRlZC1saXN0LWVudHJpZXMp Ci0gICAgICAgIChsZXQqICgocGtnLW5hbWUgKHBhY2thZ2UtZGVzYy1uYW1lIChjYXIgZW50cnkp KSkpCi0gICAgICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCBuYW1lIChzeW1ib2wtbmFtZSBwa2ct bmFtZSkpCi0gICAgICAgICAgICAocHVzaCBwa2ctbmFtZSBtYXRjaGVkKSkpKQotICAgICAgKGlm IG1hdGNoZWQKLSAgICAgICAgICAocGFja2FnZS1zaG93LXBhY2thZ2UtbGlzdCBtYXRjaGVkIG5p bCkKLSAgICAgICAgKHVzZXItZXJyb3IgIk5vIHBhY2thZ2VzIGZvdW5kIikpKSkpCi0KLShkZWZ1 biBwYWNrYWdlLW1lbnUtY2xlYXItZmlsdGVyICgpCisgICAgICAocGFja2FnZS1tZW51LS1nZW5l cmF0ZSB0KQorICAgIChwYWNrYWdlLW1lbnUtLWZpbHRlci1ieSAobGFtYmRhIChwa2ctZGVzYykK KyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gtcCBuYW1lIChzeW1ib2wtbmFt ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LWRlc2MtbmFtZSBwa2ctZGVzYykpKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJu YW1lOiVzIiBuYW1lKSkpKQorCisoZGVmdW4gcGFja2FnZS1tZW51LWZpbHRlci1ieS1zdGF0dXMg KHN0YXR1cykKKyAgIkZpbHRlciB0aGUgXCIqUGFja2FnZXMqXCIgYnVmZmVyIGJ5IFNUQVRVUy4K K0Rpc3BsYXkgb25seSBwYWNrYWdlcyB3aXRoIHNwZWNpZmllZCBTVEFUVVMuCisKK1doZW4gY2Fs bGVkIGludGVyYWN0aXZlbHksIHByb21wdCBmb3IgU1RBVFVTLCB3aGljaCBjYW4gYmUgYQorY29t bWEtc2VwYXJhdGVkIHN0cmluZy4gIElmIFNUQVRVUyBpcyBlbXB0eSwgc2hvdyBhbGwgcGFja2Fn ZXMuCisKK1doZW4gY2FsbGVkIGZyb20gTGlzcCwgU1RBVFVTIGNhbiBiZSBhIHN0cmluZyBvciBh IGxpc3Qgb2YKK3N0cmluZ3MuICBJZiBTVEFUVVMgaXMgbmlsIG9yIHRoZSBlbXB0eSBzdHJpbmcs IHNob3cgYWxsCitwYWNrYWdlcy4iCisgIChpbnRlcmFjdGl2ZSAobGlzdCAoY29tcGxldGluZy1y ZWFkICJGaWx0ZXIgYnkgc3RhdHVzOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcoImF2YWlsLW9ic28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImF2YWlsYWJsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiYnVpbHQtaW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl cGVuZGVuY3kiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc2Fi bGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlcm5hbCIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVsZCIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wYXQiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZCIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAibmV3IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ1bnNpZ25lZCIpKSkpCisgIChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1t ZW51LW1vZGUpCisgIChpZiAob3IgKG5vdCBzdGF0dXMpIChzdHJpbmctZW1wdHktcCBzdGF0dXMp KQorICAgICAgKHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgdCkKKyAgICAocGFja2FnZS1tZW51LS1m aWx0ZXItYnkgKGxhbWJkYSAocGtnLWRlc2MpCisgICAgICAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLW1hdGNoLXAgc3RhdHVzIChwYWNrYWdlLWRlc2Mtc3RhdHVzIHBrZy1kZXNjKSkpCisgICAg ICAgICAgICAgICAgICAgICAgKGZvcm1hdCAic3RhdHVzOiVzIiBzdGF0dXMpKSkpCisKKyhkZWZ1 biBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXZlcnNpb24gKHZlcnNpb24gcHJlZGljYXRlKQorICAi RmlsdGVyIHRoZSBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgVkVSU0lPTiBhbmQgUFJFRElDQVRF LgorRGlzcGxheSBvbmx5IHBhY2thZ2VzIHdpdGggYSBtYXRjaGluZyB2ZXJzaW9uLgorCitXaGVu IGNhbGxlZCBpbnRlcmFjdGl2ZWx5LCBwcm9tcHQgZm9yIG9uZSBvZiB0aGUgcXVhbGlmaWVycyBg PCcsCitgPicgb3IgYD0nLCBhbmQgYSBwYWNrYWdlIHZlcnNpb24uICBTaG93IG9ubHkgcGFja2Fn ZXMgdGhhdCBoYXMgYQorbG93ZXIgKGA8JyksIGVxdWFsIChgPScpIG9yIGhpZ2hlciAoYD4nKSB2 ZXJzaW9uIHRoYW4gdGhlCitzcGVjaWZpZWQgb25lLgorCitXaGVuIGNhbGxlZCBmcm9tIExpc3As IFZFUlNJT04gc2hvdWxkIGJlIGEgdmVyc2lvbiBzdHJpbmcgYW5kCitQUkVESUNBVEUgc2hvdWxk IGJlIHRoZSBzeW1ib2wgYD0nLCBgPCcgb3IgYD4nLgorCitJZiBWRVJTSU9OIGlzIG5pbCBvciB0 aGUgZW1wdHkgc3RyaW5nLCBzaG93IGFsbCBwYWNrYWdlcy4iCisgIChpbnRlcmFjdGl2ZSAobGV0 ICgoY2hvaWNlIChpbnRlcm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyLXRv LXN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWNoYXItY2hvaWNl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIgYnkgdmVyc2lvbj8gW1R5 cGUgPSwgPCwgPiBvciBxXSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoPzwg Pz4gPz0gP3EpKSkpKSkKKyAgICAgICAgICAgICAgICAgKGlmIChlcSBjaG9pY2UgJ3EpCisgICAg ICAgICAgICAgICAgICAgICAnKHF1aXQgbmlsKQorICAgICAgICAgICAgICAgICAgIChsaXN0IChy ZWFkLWZyb20tbWluaWJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJG aWx0ZXIgYnkgdmVyc2lvbiAoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25kICgoZXEgY2hvaWNlICc9KSAiPSBlcXVhbCB0byIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKChlcSBjaG9pY2UgJzwpICI8IGxlc3MgdGhhbiIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChlcSBjaG9pY2UgJz4pICI+IGdyZWF0 ZXIgdGhhbiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOiAiKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2UpKSkpCisgICh1bmxlc3MgKGVxdWFsIHByZWRp Y2F0ZSAncXVpdCkKKyAgICAoaWYgKG9yIChub3QgdmVyc2lvbikgKHN0cmluZy1lbXB0eS1wIHZl cnNpb24pKQorICAgICAgICAocGFja2FnZS1tZW51LS1nZW5lcmF0ZSB0KQorICAgICAgKHBhY2th Z2UtbWVudS0tZmlsdGVyLWJ5CisgICAgICAgKGxldCAoKGZ1biAoY29uZCAoKGVxIHByZWRpY2F0 ZSAnPSkgJ3ZlcnNpb24tbGlzdC09KQorICAgICAgICAgICAgICAgICAgICAgICAgKChlcSBwcmVk aWNhdGUgJzwpICd2ZXJzaW9uLWxpc3QtPCkKKyAgICAgICAgICAgICAgICAgICAgICAgICgoZXEg cHJlZGljYXRlICc+KSAndmVyc2lvbi1saXN0LT4pCisgICAgICAgICAgICAgICAgICAgICAgICAo dCAoZXJyb3IgIlVua25vd24gcHJlZGljYXRlOiAlcyIgcHJlZGljYXRlKSkpKQorICAgICAgICAg ICAgICh2ZXIgKHZlcnNpb24tdG8tbGlzdCB2ZXJzaW9uKSkpCisgICAgICAgICAobGFtYmRhIChw a2ctZGVzYykKKyAgICAgICAgICAgKGZ1bmNhbGwgZnVuIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBw a2ctZGVzYykgdmVyKSkpCisgICAgICAgKGZvcm1hdCAidmVyc2lvbnM6JXMlcyIgcHJlZGljYXRl IHZlcnNpb24pKSkpKQorCisoZGVmdW4gcGFja2FnZS1tZW51LWZpbHRlci1jbGVhciAoKQogICAi Q2xlYXIgYW55IGZpbHRlciBjdXJyZW50bHkgYXBwbGllZCB0byB0aGUgXCIqUGFja2FnZXMqXCIg YnVmZmVyLiIKICAgKGludGVyYWN0aXZlKQogICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVu dS1tb2RlKQotICAocGFja2FnZS1tZW51LS1nZW5lcmF0ZSB0IHQpKQorICAocGFja2FnZS1tZW51 LS1nZW5lcmF0ZSB0KSkKIAogKGRlZnVuIHBhY2thZ2UtbGlzdC1wYWNrYWdlcy1uby1mZXRjaCAo KQogICAiRGlzcGxheSBhIGxpc3Qgb2YgcGFja2FnZXMuCkBAIC0zNzcwLDYgKzM4OTgsNyBAQCBw YWNrYWdlLWdldC12ZXJzaW9uCiAgICAgICAgICAgICAob3IgKGxtLWhlYWRlciAicGFja2FnZS12 ZXJzaW9uIikKICAgICAgICAgICAgICAgICAobG0taGVhZGVyICJ2ZXJzaW9uIikpKSkpKSkpKQog CisMCiA7Ozs7IFF1aWNrc3RhcnQ6IHByZWNvbXB1dGUgYWN0aXZhdGlvbiBhY3Rpb25zIGZvciBm YXN0ZXIgc3RhcnQgdXAuCiAKIDs7IEFjdGl2YXRpbmcgcGFja2FnZXMgdmlhIGBwYWNrYWdlLWlu aXRpYWxpemUnIGlzIGNvc3RseTogZm9yIE4gaW5zdGFsbGVkCmRpZmYgLS1naXQgYS90ZXN0L2xp c3AvZW1hY3MtbGlzcC9wYWNrYWdlLXRlc3RzLmVsIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvcGFj a2FnZS10ZXN0cy5lbAppbmRleCA4MjhjNDU2ODQyLi4wN2Y3NzJkNzMwIDEwMDY0NAotLS0gYS90 ZXN0L2xpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLXRlc3RzLmVsCisrKyBiL3Rlc3QvbGlzcC9lbWFj cy1saXNwL3BhY2thZ2UtdGVzdHMuZWwKQEAgLTM0OSw0MyArMzQ5LDg2IEBAIHBhY2thZ2UtdGVz dC1pbnN0YWxsLW11bHRpZmlsZQogICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAg ICAgICAgICAgKHNob3VsZCAocmUtc2VhcmNoLWZvcndhcmQgcmUgbmlsIHQpKSkpKSkpCiAKKwwK Kzs7OyBQYWNrYWdlIE1lbnUgdGVzdHMKKworKGRlZm1hY3JvIHdpdGgtcGFja2FnZS1tZW51LXRl c3QgKCZyZXN0IGJvZHkpCisgICJTZXQgdXAgUGFja2FnZSBNZW51IChcIipQYWNrYWdlcypcIikg YnVmZmVyIGZvciB0ZXN0aW5nLiIKKyAgKGRlY2xhcmUgKGluZGVudCAwKSAoZGVidWcgKChbJnJl c3QgZm9ybV0pIGJvZHkpKSkKKyAgYCh3aXRoLXBhY2thZ2UtdGVzdCAoKQorICAgICAobGV0ICgo YnVmIChwYWNrYWdlLWxpc3QtcGFja2FnZXMpKSkKKyAgICAgICAodW53aW5kLXByb3RlY3QKKyAg ICAgICAgICAgKHByb2duICxAYm9keSkKKyAgICAgICAgIChraWxsLWJ1ZmZlciBidWYpKSkpKQor CiAoZXJ0LWRlZnRlc3QgcGFja2FnZS10ZXN0LXVwZGF0ZS1saXN0aW5nICgpCiAgICJFbnN1cmUg aW5zdGFsbGVkIHBhY2thZ2Ugc3RhdHVzIGlzIHVwZGF0ZWQuIgotICAod2l0aC1wYWNrYWdlLXRl c3QgKCkKLSAgICAobGV0ICgoYnVmIChwYWNrYWdlLWxpc3QtcGFja2FnZXMpKSkKLSAgICAgIChz ZWFyY2gtZm9yd2FyZC1yZWdleHAgIl4gK3NpbXBsZS1zaW5nbGUiKQotICAgICAgKHBhY2thZ2Ut bWVudS1tYXJrLWluc3RhbGwpCi0gICAgICAocGFja2FnZS1tZW51LWV4ZWN1dGUpCi0gICAgICAo cnVuLWhvb2tzICdwb3N0LWNvbW1hbmQtaG9vaykKLSAgICAgIChzaG91bGQgKHBhY2thZ2UtaW5z dGFsbGVkLXAgJ3NpbXBsZS1zaW5nbGUpKQotICAgICAgKHN3aXRjaC10by1idWZmZXIgIipQYWNr YWdlcyoiKQotICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAgIChzaG91bGQgKHJl LXNlYXJjaC1mb3J3YXJkICJeXFxzLStzaW1wbGUtc2luZ2xlXFxzLSsxLjNcXHMtK2luc3RhbGxl ZCIgbmlsIHQpKQotICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAgIChzaG91bGQt bm90IChyZS1zZWFyY2gtZm9yd2FyZCAiXlxccy0rc2ltcGxlLXNpbmdsZVxccy0rMS4zXFxzLStc XChhdmFpbGFibGVcXHxuZXdcXCkiIG5pbCB0KSkKLSAgICAgIChraWxsLWJ1ZmZlciBidWYpKSkp CisgICh3aXRoLXBhY2thZ2UtbWVudS10ZXN0CisgICAgKHNlYXJjaC1mb3J3YXJkLXJlZ2V4cCAi XiArc2ltcGxlLXNpbmdsZSIpCisgICAgKHBhY2thZ2UtbWVudS1tYXJrLWluc3RhbGwpCisgICAg KHBhY2thZ2UtbWVudS1leGVjdXRlKQorICAgIChydW4taG9va3MgJ3Bvc3QtY29tbWFuZC1ob29r KQorICAgIChzaG91bGQgKHBhY2thZ2UtaW5zdGFsbGVkLXAgJ3NpbXBsZS1zaW5nbGUpKQorICAg IChzd2l0Y2gtdG8tYnVmZmVyICIqUGFja2FnZXMqIikKKyAgICAoZ290by1jaGFyIChwb2ludC1t aW4pKQorICAgIChzaG91bGQgKHJlLXNlYXJjaC1mb3J3YXJkICJeXFxzLStzaW1wbGUtc2luZ2xl XFxzLSsxLjNcXHMtK2luc3RhbGxlZCIgbmlsIHQpKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpCisgICAgKHNob3VsZC1ub3QgKHJlLXNlYXJjaC1mb3J3YXJkICJeXFxzLStzaW1wbGUtc2lu Z2xlXFxzLSsxLjNcXHMtK1xcKGF2YWlsYWJsZVxcfG5ld1xcKSIgbmlsIHQpKSkpCisKKyhlcnQt ZGVmdGVzdCBwYWNrYWdlLXRlc3QtbGlzdC1maWx0ZXItYnktYXJjaGl2ZSAoKQorICAiRW5zdXJl IHBhY2thZ2UgbGlzdCBpcyBmaWx0ZXJlZCBjb3JyZWN0bHkgYnkgYXJjaGl2ZSB2ZXJzaW9uLiIK KyAgKHdpdGgtcGFja2FnZS1tZW51LXRlc3QKKyAgICA7OyBUT0RPOiBBZGQgYW5vdGhlciBwYWNr YWdlIGFyY2hpdmUgdG8gdGVzdCBmaWx0ZXJpbmcsIGJlY2F1c2UKKyAgICA7OyAgICAgICB0aGUg dGVzdGluZyBlbnZpcm9ubWVudCBjdXJyZW50bHkgb25seSBoYXMgb25lLgorICAgIChwYWNrYWdl LW1lbnUtZmlsdGVyLWJ5LWFyY2hpdmUgImdudSIpCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWlu KSkKKyAgICAoc2hvdWxkIChsb29raW5nLWF0ICJeXFxzLSttdWx0aS1maWxlIikpCisgICAgKHNo b3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDQpKQorICAgIChz aG91bGQtZXJyb3IgKHBhY2thZ2UtbWVudS1maWx0ZXItYnktYXJjaGl2ZSAibm9uLWV4aXN0ZW50 IGFyY2hpdmUiKSkpKQorCisoZXJ0LWRlZnRlc3QgcGFja2FnZS10ZXN0LWxpc3QtZmlsdGVyLWJ5 LWtleXdvcmQgKCkKKyAgIkVuc3VyZSBwYWNrYWdlIGxpc3QgaXMgZmlsdGVyZWQgY29ycmVjdGx5 IGJ5IHBhY2thZ2Uga2V5d29yZC4iCisgICh3aXRoLXBhY2thZ2UtbWVudS10ZXN0CisgICAgKHBh Y2thZ2UtbWVudS1maWx0ZXItYnkta2V5d29yZCAiZnJvYm5pY2F0ZSIpCisgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKKyAgICAoc2hvdWxkIChyZS1zZWFyY2gtZm9yd2FyZCAiXlxccy0rc2lt cGxlLXNpbmdsZSIgbmlsIHQpKQorICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1t aW4pIChwb2ludC1tYXgpKSAxKSkKKyAgICAoc2hvdWxkLWVycm9yIChwYWNrYWdlLW1lbnUtZmls dGVyLWJ5LWtleXdvcmQgIm5vbi1leGlzdGVudC1rZXl3b3JkIikpKSkKIAogKGVydC1kZWZ0ZXN0 IHBhY2thZ2UtdGVzdC1saXN0LWZpbHRlci1ieS1uYW1lICgpCiAgICJFbnN1cmUgcGFja2FnZSBs aXN0IGlzIGZpbHRlcmVkIGNvcnJlY3RseSBieSBwYWNrYWdlIG5hbWUuIgotICAod2l0aC1wYWNr YWdlLXRlc3QgKCkKLSAgICAobGV0ICgoYnVmIChwYWNrYWdlLWxpc3QtcGFja2FnZXMpKSkKKyAg KHdpdGgtcGFja2FnZS1tZW51LXRlc3QgKCkKKyAgICAocGFja2FnZS1tZW51LWZpbHRlci1ieS1u YW1lICJ0ZXRyaXMiKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKHNob3VsZCAo cmUtc2VhcmNoLWZvcndhcmQgIl5cXHMtK3RldHJpcyIgbmlsIHQpKQorICAgIChzaG91bGQgKD0g KGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAxKSkpKQorCisoZXJ0LWRlZnRl c3QgcGFja2FnZS10ZXN0LWxpc3QtZmlsdGVyLWJ5LXN0YXR1cyAoKQorICAiRW5zdXJlIHBhY2th Z2UgbGlzdCBpcyBmaWx0ZXJlZCBjb3JyZWN0bHkgYnkgcGFja2FnZSBzdGF0dXMuIgorICAod2l0 aC1wYWNrYWdlLW1lbnUtdGVzdAorICAgIChwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXN0YXR1cyAi YXZhaWxhYmxlIikKKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgIChzaG91bGQgKHJl LXNlYXJjaC1mb3J3YXJkICJeXFxzLSttdWx0aS1maWxlIiBuaWwgdCkpCisgICAgKHNob3VsZCAo PSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDQpKQorICAgIDs7IE5vIGlu c3RhbGxlZCBwYWNrYWdlcyBpbiBkZWZhdWx0IGVudmlyb25tZW50LgorICAgIChzaG91bGQtZXJy b3IgKHBhY2thZ2UtbWVudS1maWx0ZXItYnktc3RhdHVzICJpbnN0YWxsZWQiKSkpKQorCisoZXJ0 LWRlZnRlc3QgcGFja2FnZS10ZXN0LWxpc3QtZmlsdGVyLWJ5LXZlcnNpb24gKCkKKyAgIkVuc3Vy ZSBwYWNrYWdlIGxpc3QgaXMgZmlsdGVyZWQgY29ycmVjdGx5IGJ5IHBhY2thZ2UgdmVyc2lvbi4i CisgICh3aXRoLXBhY2thZ2UtbWVudS10ZXN0CisgICAgKHBhY2thZ2UtbWVudS1maWx0ZXItYnkt dmVyc2lvbiAiMS4xIiAnPSkKKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgIChzaG91 bGQgKGxvb2tpbmctYXQgIl5cXHMtK3NpbXBsZS10d28tZGVwZW5kIikpCisgICAgKHNob3VsZCAo PSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKSkpCisKKyhlcnQtZGVm dGVzdCBwYWNrYWdlLXRlc3QtbGlzdC1maWx0ZXItY2xlYXIgKCkKKyAgIkVuc3VyZSBwYWNrYWdl IGxpc3QgZmlsdGVyIGlzIGNsZWFyZWQgY29ycmVjdGx5LiIKKyAgKHdpdGgtcGFja2FnZS1tZW51 LXRlc3QKKyAgICAobGV0ICgobnVtLXBhY2thZ2VzIChjb3VudC1saW5lcyAocG9pbnQtbWluKSAo cG9pbnQtbWF4KSkpKQogICAgICAgKHBhY2thZ2UtbWVudS1maWx0ZXItYnktbmFtZSAidGV0cmlz IikKLSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCi0gICAgICAoc2hvdWxkIChyZS1zZWFy Y2gtZm9yd2FyZCAiXlxccy0rdGV0cmlzIiBuaWwgdCkpCiAgICAgICAoc2hvdWxkICg9IChjb3Vu dC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMSkpCi0gICAgICAoa2lsbC1idWZmZXIg YnVmKSkpKQotCi0oZXJ0LWRlZnRlc3QgcGFja2FnZS10ZXN0LWxpc3QtY2xlYXItZmlsdGVyICgp Ci0gICJFbnN1cmUgcGFja2FnZSBsaXN0IGZpbHRlciBpcyBjbGVhcmVkIGNvcnJlY3RseS4iCi0g ICh3aXRoLXBhY2thZ2UtdGVzdCAoKQotICAgIChsZXQgKChidWYgKHBhY2thZ2UtbGlzdC1wYWNr YWdlcykpKQotICAgICAgKGxldCAoKG51bS1wYWNrYWdlcyAoY291bnQtbGluZXMgKHBvaW50LW1p bikgKHBvaW50LW1heCkpKSkKLSAgICAgICAgKHNob3VsZCAoPiBudW0tcGFja2FnZXMgMSkpCi0g ICAgICAgIChwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LW5hbWUgInRldHJpcyIpCi0gICAgICAgIChz aG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAxKSkKLSAgICAg ICAgKHBhY2thZ2UtbWVudS1jbGVhci1maWx0ZXIpCi0gICAgICAgIChzaG91bGQgKD0gKGNvdW50 LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSBudW0tcGFja2FnZXMpKSkKLSAgICAgIChr aWxsLWJ1ZmZlciBidWYpKSkpCisgICAgICAocGFja2FnZS1tZW51LWZpbHRlci1jbGVhcikKKyAg ICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSBudW0t cGFja2FnZXMpKSkpKQogCiAoZXJ0LWRlZnRlc3QgcGFja2FnZS10ZXN0LXVwZGF0ZS1hcmNoaXZl cyAoKQogICAiVGVzdCB1cGRhdGluZyBwYWNrYWdlIGFyY2hpdmVzLiIKLS0gCjIuMjAuMQoK --0000000000004ac41505987b68a6-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 30 07:18:34 2019 Received: (at 38424) by debbugs.gnu.org; 30 Nov 2019 12:18:34 +0000 Received: from localhost ([127.0.0.1]:33827 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ib1hq-0004u2-AQ for submit@debbugs.gnu.org; Sat, 30 Nov 2019 07:18:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42891) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ib1ho-0004tn-69 for 38424@debbugs.gnu.org; Sat, 30 Nov 2019 07:18:32 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34008) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ib1hh-0001NW-Pa; Sat, 30 Nov 2019 07:18:26 -0500 Received: from [176.228.60.248] (port=4826 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ib1hh-00080k-7u; Sat, 30 Nov 2019 07:18:25 -0500 Date: Sat, 30 Nov 2019 14:18:12 +0200 Message-Id: <837e3ho8vv.fsf@gnu.org> From: Eli Zaretskii To: Stefan Kangas In-reply-to: (message from Stefan Kangas on Fri, 29 Nov 2019 13:31:10 +0100) Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -0.8 (/) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.8 (-) > From: Stefan Kangas > Date: Fri, 29 Nov 2019 13:31:10 +0100 > > The attached patches adds new commands to filter the "*Packages*" > buffer by version, status and archive. (The first patch only adds new > version list comparison predicates, something I needed to simplify the > second patch.) We deliberately didn't define the functions you are now adding, since they are just one 'not' away. Do they really simplify the callers so much that we now want to add them? > * doc/emacs/package.texi (Package Menu): Document it. This tells nothing about the changes which aren't "documenting it". (And, btw, what is "it" here is not clear at all.) > - (when (or (eq packages t) (memq name packages)) > + (when (or (not packages) (memq name packages)) > (dolist (pkg (cdr elt)) > (when (package--has-keyword-p pkg keywords) > (push pkg info-list)))))) > @@ -2950,7 +2958,7 @@ package-menu--refresh > (when (and (package--has-keyword-p pkg keywords) > (or package-list-unversioned > (package--bi-desc-version (cdr elt))) > - (or (eq packages t) (memq name packages))) > + (or (not packages) (memq name packages))) > (push pkg info-list))))) > > ;; Available and disabled packages: > @@ -2959,7 +2967,7 @@ package-menu--refresh > (dolist (elt package-archive-contents) > (let ((name (car elt))) > ;; To be displayed it must be in PACKAGES; > - (when (and (or (eq packages t) (memq name packages)) > + (when (and (or (not packages) (memq name packages)) Does the above mean you are suggesting a backward-incompatible API change? > +Arguments PACKAGES and KEYWORDS are like `package-menu--refresh'." Arguments cannot be "like" a function. Suggest to say "like in `package-menu--refresh'" instead. I don't use package.el, so I'd like someone who does or knows the code well to review the patch. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 01 06:13:10 2019 Received: (at 38424) by debbugs.gnu.org; 1 Dec 2019 11:13:10 +0000 Received: from localhost ([127.0.0.1]:35530 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibNA6-00035h-37 for submit@debbugs.gnu.org; Sun, 01 Dec 2019 06:13:10 -0500 Received: from ted.gofardesign.uk ([67.225.143.91]:44104) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibNA4-00035Q-8j for 38424@debbugs.gnu.org; Sun, 01 Dec 2019 06:13:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=marxist.se; s=default; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=0mn2BWuVtCmEQUXsSggCS6lIENiB0XUbu99SPWaPcYM=; b=WfHQqE9Qg9q0WgHD9FFwbVDGmy UuEqGTBWqpmkFzqgfgsNTEaKDqxzqp/7F/dJoZdLibhmKO/vt1QInfsHu4mnH5dnoiY/LqwCZaAlb yCcjycD7YuSO/T4FeisGq4MOpOWwdZ2ezDHpnj0l+MqykiCAhVpdCme/2izXnZADRfJCDTG3sDrRs /vWMFTheKMKGTouQ584S7dz4uLxtdZfaTAI7kAckndhbXMHoJet9unIe4B+HFl2vCBTjdW8pKLmKm Q0zOuw/9tlpB5EOBTCxKIyUGhkMGVt+V6yGQoXEE/jReOxsSY9hWdm84/8z4WMLDxyZpisk7UIn0w TIy7nRZQ==; Received: from h-70-69.a785.priv.bahnhof.se ([155.4.70.69]:38980 helo=localhost) by ted.gofardesign.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1ibN9w-00093q-Mi; Sun, 01 Dec 2019 06:13:01 -0500 From: Stefan Kangas To: Eli Zaretskii Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu In-Reply-To: <837e3ho8vv.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 30 Nov 2019 14:18:12 +0200") References: <837e3ho8vv.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Date: Sun, 01 Dec 2019 12:12:58 +0100 Message-ID: <871rtoi9j9.fsf@marxist.se> MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ted.gofardesign.uk X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - marxist.se X-Get-Message-Sender-Via: ted.gofardesign.uk: authenticated_id: stefan@marxist.se X-Authenticated-Sender: ted.gofardesign.uk: stefan@marxist.se X-Source: X-Source-Args: X-Source-Dir: X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: Stefan Kangas >> Date: Fri, 29 Nov 2019 13:31:10 +0100 >> >> The attached patches adds new commands to filter the "*Packages*" >> buffer by version, status and archive. (The first patch only adds new >> version list comparison predicates, something I needed to simplify the >> second patch.) > > We deliberately didn't define the functions you are now adding, since > they are just one 'not' away. Do they really simplify the callers so > much that we now want to add them? I don't know, but I'm also not sure I understand the benefit of not adding them. In this case, it let me do this: + (let ((fun (cond ((eq predicate '=) 'version-list-=) + ((eq predicate '<) 'version-list-<) + ((eq predicate '>) 'version-list->) I could of course use a lambda here instead, but it makes the code a bit uglier. Let me know if that's preferable. >> * doc/emacs/package.texi (Package Menu): Document it. > > This tells nothing about the changes which aren't "documenting it". > (And, btw, what is "it" here is not clear at all.) Thanks. I thought that was how we usually wrote. Is "Document the new commands." better? >> - (when (or (eq packages t) (memq name packages)) >> + (when (or (not packages) (memq name packages)) >> (dolist (pkg (cdr elt)) >> (when (package--has-keyword-p pkg keywords) >> (push pkg info-list)))))) >> @@ -2950,7 +2958,7 @@ package-menu--refresh >> (when (and (package--has-keyword-p pkg keywords) >> (or package-list-unversioned >> (package--bi-desc-version (cdr elt))) >> - (or (eq packages t) (memq name packages))) >> + (or (not packages) (memq name packages))) >> (push pkg info-list))))) >> >> ;; Available and disabled packages: >> @@ -2959,7 +2967,7 @@ package-menu--refresh >> (dolist (elt package-archive-contents) >> (let ((name (car elt))) >> ;; To be displayed it must be in PACKAGES; >> - (when (and (or (eq packages t) (memq name packages)) >> + (when (and (or (not packages) (memq name packages)) > > Does the above mean you are suggesting a backward-incompatible API > change? AFAIU, this does not change the API since this is an internal function. >> +Arguments PACKAGES and KEYWORDS are like `package-menu--refresh'." > > Arguments cannot be "like" a function. Suggest to say "like in > `package-menu--refresh'" instead. Right, I'll fix that. > I don't use package.el, so I'd like someone who does or knows the code > well to review the patch. I'll wait for that review. Thank you for taking a look. Best regards, Stefan Kangas From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 01 06:16:52 2019 Received: (at 38424) by debbugs.gnu.org; 1 Dec 2019 11:16:52 +0000 Received: from localhost ([127.0.0.1]:35538 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibNDf-0003CT-VK for submit@debbugs.gnu.org; Sun, 01 Dec 2019 06:16:52 -0500 Received: from ted.gofardesign.uk ([67.225.143.91]:44574) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibNDe-0003CE-DP for 38424@debbugs.gnu.org; Sun, 01 Dec 2019 06:16:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=marxist.se; s=default; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=YdAm8t/OueILeoyYeAhaIqRQTvhV0CZGbrz8POB75u8=; b=pFMWCfA7cu5gA2kqehDevFJlSl mCqU42QF6h4Kgr+2Oevaon9tCbSszzLl8gMJRCumhBHYkDCGUawbmd/+gRX8Np+cZlTTs6y2yp3gO 684m/hxx6VeqbQZ76TCWnjd8VINbkfgvKZ+EvNncdWnbKJ3oIWlju2oFTZVTi42C0SuZ0T6hZQxb7 W36G+82aDYy1P3yj725SNYfjlKFehbuFRgz/qLd+qujfFQ4L6yrEuT7170wSwiDvqM285jxx/SmVQ c8XwdfaYYHTuphvXtMmkCBpo9ZsXHCPZD0HorAQRIK98prACsD83Sd8UdUmAxyEzC7kU/WPqd3c52 QF1DjcGw==; Received: from h-70-69.a785.priv.bahnhof.se ([155.4.70.69]:39008 helo=localhost) by ted.gofardesign.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1ibNDY-000A7V-Tf; Sun, 01 Dec 2019 06:16:45 -0500 From: Stefan Kangas To: Eli Zaretskii Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu In-Reply-To: <871rtoi9j9.fsf@marxist.se> (Stefan Kangas's message of "Sun, 01 Dec 2019 12:12:58 +0100") References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Date: Sun, 01 Dec 2019 12:16:43 +0100 Message-ID: <87y2vwgusk.fsf@marxist.se> MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ted.gofardesign.uk X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - marxist.se X-Get-Message-Sender-Via: ted.gofardesign.uk: authenticated_id: stefan@marxist.se X-Authenticated-Sender: ted.gofardesign.uk: stefan@marxist.se X-Source: X-Source-Args: X-Source-Dir: X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Kangas writes: >>> * doc/emacs/package.texi (Package Menu): Document it. >> >> This tells nothing about the changes which aren't "documenting it". >> (And, btw, what is "it" here is not clear at all.) > > Thanks. I thought that was how we usually wrote. > > Is "Document the new commands." better? Wait, do you mean to also comment on moving the old commands around? If so, I'd suggest the following: "Document the new commands and move the fitering commands to follow a better sorting order." Does that sound better? Best regards, Stefan Kangas From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 01 13:11:48 2019 Received: (at 38424) by debbugs.gnu.org; 1 Dec 2019 18:11:49 +0000 Received: from localhost ([127.0.0.1]:36677 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibThE-00019O-HC for submit@debbugs.gnu.org; Sun, 01 Dec 2019 13:11:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45081) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibThC-000195-Nf for 38424@debbugs.gnu.org; Sun, 01 Dec 2019 13:11:47 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51765) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ibTh4-000721-8a; Sun, 01 Dec 2019 13:11:39 -0500 Received: from [176.228.60.248] (port=2890 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ibTh3-0005na-N5; Sun, 01 Dec 2019 13:11:38 -0500 Date: Sun, 01 Dec 2019 20:11:22 +0200 Message-Id: <83fti3ncfp.fsf@gnu.org> From: Eli Zaretskii To: Stefan Kangas In-reply-to: <871rtoi9j9.fsf@marxist.se> (message from Stefan Kangas on Sun, 01 Dec 2019 12:12:58 +0100) Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Kangas > Cc: 38424@debbugs.gnu.org > Date: Sun, 01 Dec 2019 12:12:58 +0100 > > > We deliberately didn't define the functions you are now adding, since > > they are just one 'not' away. Do they really simplify the callers so > > much that we now want to add them? > > I don't know, but I'm also not sure I understand the benefit of not > adding them. The same reason why we don't have string-greater-p: keep Emacs from becoming larger without a good reason. > In this case, it let me do this: > > + (let ((fun (cond ((eq predicate '=) 'version-list-=) > + ((eq predicate '<) 'version-list-<) > + ((eq predicate '>) 'version-list->) > > I could of course use a lambda here instead, but it makes the code a > bit uglier. Or you could use a defsubst or an inline function. > >> * doc/emacs/package.texi (Package Menu): Document it. > > > > This tells nothing about the changes which aren't "documenting it". > > (And, btw, what is "it" here is not clear at all.) > > Thanks. I thought that was how we usually wrote. We do, but in a different situation. Like this: * lisp/foo.el (foo-bar-quux-func): New function. * doc/lispref/foo-docs.texi (Foo Bar): Document it. In this case, it's immediately clear what "it" refers to. But in your case: * lisp/emacs-lisp/package.el (package-menu-filter-by-version) (package-menu-filter-by-status, package-menu-filter-by-archive): New filter functions. (package-menu--filter-by): New helper function. (package-menu-filter-by-keyword, package-menu-filter-by-name): Use above helper function. (package-menu-mode-menu): (package-menu-mode-map): Update menu to include new filter functions. * doc/emacs/package.texi (Package Menu): Document it. * etc/NEWS: Announce it. it is much less clear, because there are many "its" above. > >> - (when (or (eq packages t) (memq name packages)) > >> + (when (or (not packages) (memq name packages)) > >> (dolist (pkg (cdr elt)) > >> (when (package--has-keyword-p pkg keywords) > >> (push pkg info-list)))))) > >> @@ -2950,7 +2958,7 @@ package-menu--refresh > >> (when (and (package--has-keyword-p pkg keywords) > >> (or package-list-unversioned > >> (package--bi-desc-version (cdr elt))) > >> - (or (eq packages t) (memq name packages))) > >> + (or (not packages) (memq name packages))) > >> (push pkg info-list))))) > >> > >> ;; Available and disabled packages: > >> @@ -2959,7 +2967,7 @@ package-menu--refresh > >> (dolist (elt package-archive-contents) > >> (let ((name (car elt))) > >> ;; To be displayed it must be in PACKAGES; > >> - (when (and (or (eq packages t) (memq name packages)) > >> + (when (and (or (not packages) (memq name packages)) > > > > Does the above mean you are suggesting a backward-incompatible API > > change? > > AFAIU, this does not change the API since this is an internal > function. But doesn't it change the API of that internal function in incompatible ways? If it does, was that really necessary? From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 01 13:12:53 2019 Received: (at 38424) by debbugs.gnu.org; 1 Dec 2019 18:12:53 +0000 Received: from localhost ([127.0.0.1]:36681 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibTiG-0001BW-Vn for submit@debbugs.gnu.org; Sun, 01 Dec 2019 13:12:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45232) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ibTiF-0001BI-Hn for 38424@debbugs.gnu.org; Sun, 01 Dec 2019 13:12:51 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:51793) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ibTiA-0000Cg-El; Sun, 01 Dec 2019 13:12:46 -0500 Received: from [176.228.60.248] (port=2964 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ibTi5-0005sl-Pj; Sun, 01 Dec 2019 13:12:44 -0500 Date: Sun, 01 Dec 2019 20:12:29 +0200 Message-Id: <83eexnncdu.fsf@gnu.org> From: Eli Zaretskii To: Stefan Kangas In-reply-to: <87y2vwgusk.fsf@marxist.se> (message from Stefan Kangas on Sun, 01 Dec 2019 12:16:43 +0100) Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> <87y2vwgusk.fsf@marxist.se> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Kangas > Cc: 38424@debbugs.gnu.org > Date: Sun, 01 Dec 2019 12:16:43 +0100 > > Stefan Kangas writes: > > >>> * doc/emacs/package.texi (Package Menu): Document it. > >> > >> This tells nothing about the changes which aren't "documenting it". > >> (And, btw, what is "it" here is not clear at all.) > > > > Thanks. I thought that was how we usually wrote. > > > > Is "Document the new commands." better? > > Wait, do you mean to also comment on moving the old commands around? Yes. > If so, I'd suggest the following: "Document the new commands and move > the fitering commands to follow a better sorting order." Much better, thanks. Bonus points for saying what sorting order is that, to make your motivation clear. From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 24 20:38:08 2020 Received: (at 38424) by debbugs.gnu.org; 25 Jan 2020 01:38:08 +0000 Received: from localhost ([127.0.0.1]:54879 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ivAOl-0003Jf-ME for submit@debbugs.gnu.org; Fri, 24 Jan 2020 20:38:08 -0500 Received: from ted.gofardesign.uk ([67.225.143.91]:53178) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ivAOj-0003JB-FG for 38424@debbugs.gnu.org; Fri, 24 Jan 2020 20:38:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=marxist.se; s=default; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Ro8lbtxHOiTUBBdy4cpxmNcsjym8yy9nOc36gGiHGP8=; b=uJLa7IaroSCAuq75e1fl7Wiene EvNME9p/odE1+1U5Ygk6aMKtuGKqDgrnim+VTwols81zmYNrI9Fg9jcsmHdTcSP7JIK2YZYO5CnC/ 6G0Hgn+jA07Bq9qfuNJvI67/cKlwV0QYEDu1JK91gghLXm3JAqyZjs+2Mt+L+VmY91YUYjLbFE7vE Co5Az2hR0WSzuuoruIMeCfkJAUp4/qIgpsT50NdWrt2csVabKqKVqr1j73b1jKWSe/BS8CVjUB0M0 cmjoS9uCYFzt1svwd1BNgom/A22wW9ByUi3w/PoLtmAazaGmGp/k7Z9wqu+Rzyh+ERDU/dSmRrLM9 RU+u17oQ==; Received: from h-70-69.a785.priv.bahnhof.se ([155.4.70.69]:46020 helo=localhost) by ted.gofardesign.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1ivAOd-0011SH-Gu; Fri, 24 Jan 2020 20:37:59 -0500 From: Stefan Kangas To: Eli Zaretskii Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu In-Reply-To: <83fti3ncfp.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 01 Dec 2019 20:11:22 +0200") References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> <83fti3ncfp.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Date: Sat, 25 Jan 2020 02:37:57 +0100 Message-ID: <877e1g8gei.fsf@marxist.se> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ted.gofardesign.uk X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - marxist.se X-Get-Message-Sender-Via: ted.gofardesign.uk: authenticated_id: stefan@marxist.se X-Authenticated-Sender: ted.gofardesign.uk: stefan@marxist.se X-Source: X-Source-Args: X-Source-Dir: X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Eli Zaretskii writes: >> > We deliberately didn't define the functions you are now adding, since >> > they are just one 'not' away. Do they really simplify the callers so >> > much that we now want to add them? >> >> I don't know, but I'm also not sure I understand the benefit of not >> adding them. > > The same reason why we don't have string-greater-p: keep Emacs from > becoming larger without a good reason. I've rewritten the patch to not add such functions. >> > This tells nothing about the changes which aren't "documenting it". >> > (And, btw, what is "it" here is not clear at all.) Fixed. > But doesn't it change the API of that internal function in > incompatible ways? If it does, was that really necessary? I've changed the patch to no longer do that change. The change is in any case orthogonal to what I'm trying to achieve here and better to make separately. (I might later suggest that change in a separate patch.) Please find attached an updated patch. I hope it's more straightforward to review. Best regards, Stefan Kangas --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-Add-new-filter-functions-to-Package-Menu.patch >From 69c048a68cfe9cce14b6aa141bea770187496aec Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Tue, 5 Nov 2019 15:48:48 +0100 Subject: [PATCH] Add new filter functions to Package Menu * lisp/emacs-lisp/package.el (package-menu-filter-by-version) (package-menu-filter-by-status, package-menu-filter-by-archive): New filter functions. (package-menu--filter-by): New helper function. (package-menu-filter-by-keyword, package-menu-filter-by-name): Use the above helper function. (package-menu-mode-menu): (package-menu-mode-map): Update menu to include new filter functions. * doc/emacs/package.texi (Package Menu): Document the new commands and re-arrange the sort order of commands to be closer to the one in describe-major-mode. * etc/NEWS: Announce the new commands. * lisp/emacs-lisp/package.el (package-menu--display): New function extracted from.... (package-menu--generate): ...here. * test/lisp/emacs-lisp/package-tests.el (with-package-menu-test): New macro. (package-test-update-listing, package-test-list-filter-by-name) (package-test-list-filter-clear): Use above macro. (package-test-list-filter-by-archive) (package-test-list-filter-by-keyword) (package-test-list-filter-by-status) (package-test-list-filter-by-version-=) (package-test-list-filter-by-version-<) (package-test-list-filter-by-version->): New tests. (package-test-filter-by-version): New helper function. --- doc/emacs/package.texi | 63 +++++--- etc/NEWS | 15 ++ lisp/emacs-lisp/package.el | 219 ++++++++++++++++++++------ test/lisp/emacs-lisp/package-tests.el | 117 ++++++++++---- 4 files changed, 320 insertions(+), 94 deletions(-) diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi index 1cac7f9b4b..360fc980e4 100644 --- a/doc/emacs/package.texi +++ b/doc/emacs/package.texi @@ -151,27 +151,6 @@ Package Menu list of available packages from the package archive again, and redisplays the package list. -@item / k -@kindex / k @r{(Package Menu)} -@findex package-menu-filter-by-keyword -Filter the package list by keyword -(@code{package-menu-filter-by-keyword}). This prompts for a keyword -(e.g., @samp{games}), then shows only the packages that relate to that -keyword. - -@item / n -@kindex / n @r{(Package Menu)} -@findex package-menu-filter-by-name -Filter the package list by name (@code{package-menu-filter-by-name}). -This prompts for a string, then shows only the packages whose names -match a regexp with that value. - -@item / / -@kindex / / @r{(Package Menu)} -@findex package-menu-clear-filter -Clear filter currently applied to the package list -(@code{package-menu-clear-filter}). - @item H @kindex H @r{(Package Menu)} @findex package-menu-hide-package @@ -183,6 +162,48 @@ Package Menu @findex package-menu-toggle-hiding Toggle visibility of old versions of packages and also of versions from lower-priority archives (@code{package-menu-toggle-hiding}). + +@item / a +@kindex / a @r{(Package Menu)} +@findex package-menu-filter-by-archive +Filter package list by archive (@code{package-menu-filter-by-archive}). +This prompts for a package archive (e.g., @samp{gnu}), then shows only +packages from that archive. + +@item / k +@kindex / k @r{(Package Menu)} +@findex package-menu-filter-by-keyword +Filter package list by keyword (@code{package-menu-filter-by-keyword}). +This prompts for a keyword (e.g., @samp{games}), then shows only +packages with that keyword. + +@item / n +@kindex / n @r{(Package Menu)} +@findex package-menu-filter-by-name +Filter package list by name (@code{package-menu-filter-by-name}). +This prompts for a regular expression, then shows only packages +with names matching that regexp. + +@item / s +@kindex / s @r{(Package Menu)} +@findex package-menu-filter-by-status +Filter package list by status (@code{package-menu-filter-by-status}). +This prompts for one or more statuses (e.g., @samp{available}), then +shows only packages with matching status. + +@item / v +@kindex / v @r{(Package Menu)} +@findex package-menu-filter-by-version +Filter package list by version (@code{package-menu-filter-by-version}). +This prompts first for one of the qualifiers @samp{<}, @samp{>} or +@samp{=}, and then a package version, and shows packages that has a +lower, equal or higher version than the one specified. + +@item / / +@kindex / / @r{(Package Menu)} +@findex package-menu-filter-clear +Clear filter currently applied to the package list +(@code{package-menu-filter-clear}). @end table @noindent diff --git a/etc/NEWS b/etc/NEWS index 5395f2ccfb..f9cdfbcca9 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -103,6 +103,21 @@ supplied error message. *** New connection method "media", which allows accessing media devices like cell phones, tablets or cameras. +** Package + ++++ +*** New functions to filter the package list. +The filter command key bindings are as follows: + +key binding +--- ------- +/ a package-menu-filter-by-archive +/ k package-menu-filter-by-keyword +/ n package-menu-filter-by-name +/ s package-menu-filter-by-status +/ v package-menu-filter-by-version +/ / package-menu-filter-clear + * New Modes and Packages in Emacs 28.1 diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index a9508c1bdc..f14ef7919e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -2679,15 +2679,18 @@ package-menu-mode-map (define-key map "i" 'package-menu-mark-install) (define-key map "U" 'package-menu-mark-upgrades) (define-key map "r" 'revert-buffer) - (define-key map (kbd "/ k") 'package-menu-filter-by-keyword) - (define-key map (kbd "/ n") 'package-menu-filter-by-name) - (define-key map (kbd "/ /") 'package-menu-clear-filter) (define-key map "~" 'package-menu-mark-obsolete-for-deletion) (define-key map "x" 'package-menu-execute) (define-key map "h" 'package-menu-quick-help) (define-key map "H" #'package-menu-hide-package) (define-key map "?" 'package-menu-describe-package) (define-key map "(" #'package-menu-toggle-hiding) + (define-key map (kbd "/ /") 'package-menu-clear-filter) + (define-key map (kbd "/ a") 'package-menu-filter-by-archive) + (define-key map (kbd "/ k") 'package-menu-filter-by-keyword) + (define-key map (kbd "/ n") 'package-menu-filter-by-name) + (define-key map (kbd "/ s") 'package-menu-filter-by-status) + (define-key map (kbd "/ v") 'package-menu-filter-by-version) map) "Local keymap for `package-menu-mode' buffers.") @@ -2714,8 +2717,11 @@ package-menu-mode-menu "--" ("Filter Packages" + ["Filter by Archive" package-menu-filter-by-archive :help "Filter packages by archive"] ["Filter by Keyword" package-menu-filter-by-keyword :help "Filter packages by keyword"] ["Filter by Name" package-menu-filter-by-name :help "Filter packages by name"] + ["Filter by Status" package-menu-filter-by-status :help "Filter packages by status"] + ["Filter by Version" package-menu-filter-by-version :help "Filter packages by version"] ["Clear Filter" package-menu-clear-filter :help "Clear package list filter"]) ["Hide by Regexp" package-menu-hide-package :help "Permanently hide all packages matching a regexp"] @@ -3021,22 +3027,31 @@ package--has-keyword-p found) t)) -(defun package-menu--generate (remember-pos packages &optional keywords) - "Populate the Package Menu. +(defun package-menu--display (remember-pos suffix) + "Display the Package Menu. If REMEMBER-POS is non-nil, keep point on the same entry. + +If SUFFIX is non-nil, append that to \"Package\" for the first +column in the header line." + (setf (car (aref tabulated-list-format 0)) + (if suffix + (concat "Package[" suffix "]") + "Package")) + (tabulated-list-init-header) + (tabulated-list-print remember-pos)) + +(defun package-menu--generate (remember-pos &optional packages keywords) + "Populate and display the Package Menu. PACKAGES should be t, which means to display all known packages, or a list of package names (symbols) to display. With KEYWORDS given, only packages with those keywords are shown." (package-menu--refresh packages keywords) - (setf (car (aref tabulated-list-format 0)) - (if keywords - (let ((filters (mapconcat #'identity keywords ","))) - (concat "Package[" filters "]")) - "Package")) - (tabulated-list-init-header) - (tabulated-list-print remember-pos)) + (package-menu--display remember-pos + (when keywords + (let ((filters (mapconcat #'identity keywords ","))) + (concat "Package[" filters "]"))))) (defun package-menu--print-info (pkg) "Return a package entry suitable for `tabulated-list-entries'. @@ -3673,45 +3688,160 @@ package-show-package-list (select-window win) (switch-to-buffer buf)))) +(defun package-menu--filter-by (predicate suffix) + "Filter \"*Packages*\" buffer by PREDICATE and add SUFFIX to header. +PREDICATE is a function which will be called with one argument, a +`package-desc' object, and returns t if that object should be +listed in the Package Menu. + +SUFFIX is passed on to `package-menu--display' and is added to +the header line of the first column." + ;; Update `tabulated-list-entries' so that it contains all + ;; packages before searching. + (package-menu--refresh t nil) + (let (found-entries) + (dolist (entry tabulated-list-entries) + (when (funcall predicate (car entry)) + (push entry found-entries))) + (if found-entries + (progn + (setq tabulated-list-entries found-entries) + (package-menu--display t suffix)) + (user-error "No packages found")))) + +(defun package-menu-filter-by-archive (archive) + "Filter the \"*Packages*\" buffer by ARCHIVE. +Display only packages from package archive ARCHIVE. + +When called interactively, prompt for ARCHIVE, which can be a +comma-separated string. If ARCHIVE is empty, show all packages. + +When called from Lisp, ARCHIVE can be a string or a list of +strings. If ARCHIVE is nil or the empty string, show all +packages." + (interactive (list (completing-read-multiple + "Filter by archive (comma separated): " + (mapcar #'car package-archives)))) + (package--ensure-package-menu-mode) + (let ((re (if (listp archive) + (regexp-opt archive) + archive))) + (package-menu--filter-by (lambda (pkg-desc) + (let ((pkg-archive (package-desc-archive pkg-desc))) + (and pkg-archive + (string-match-p re pkg-archive)))) + (concat "archive:" (if (listp archive) + (string-join archive ",") + archive))))) + (defun package-menu-filter-by-keyword (keyword) "Filter the \"*Packages*\" buffer by KEYWORD. -Show only those items that relate to the specified KEYWORD. - -KEYWORD can be a string or a list of strings. If it is a list, a -package will be displayed if it matches any of the keywords. -Interactively, it is a list of strings separated by commas. - -KEYWORD can also be used to filter by status or archive name by -using keywords like \"arc:gnu\" and \"status:available\". -Statuses available include \"incompat\", \"available\", -\"built-in\" and \"installed\"." - (interactive - (list (completing-read-multiple - "Keywords (comma separated): " (package-all-keywords)))) +Display only packages with specified KEYWORD. + +When called interactively, prompt for KEYWORD, which can be a +comma-separated string. If KEYWORD is empty, show all packages. + +When called from Lisp, KEYWORD can be a string or a list of +strings. If KEYWORD is nil or the empty string, show all +packages." + (interactive (list (completing-read-multiple + "Keywords (comma separated): " + (package-all-keywords)))) + (when (stringp keyword) + (setq keyword (list keyword))) (package--ensure-package-menu-mode) - (package-show-package-list t (if (stringp keyword) - (list keyword) - keyword))) + (if (not keyword) + (package-menu--generate t t) + (package-menu--filter-by (lambda (pkg-desc) + (package--has-keyword-p pkg-desc keyword)) + (concat "keyword:" (string-join keyword ","))))) (defun package-menu-filter-by-name (name) - "Filter the \"*Packages*\" buffer by NAME. -Show only those items whose name matches the regular expression -NAME. If NAME is nil or the empty string, show all packages." - (interactive (list (read-from-minibuffer "Filter by name (regexp): "))) + "Filter the \"*Packages*\" buffer by NAME regexp. +Display only packages with name that matches regexp NAME. + +When called interactively, prompt for NAME. + +If NAME is nil or the empty string, show all packages." + (interactive (list (read-regexp "Filter by name (regexp)"))) (package--ensure-package-menu-mode) (if (or (not name) (string-empty-p name)) - (package-show-package-list t nil) - ;; Update `tabulated-list-entries' so that it contains all - ;; packages before searching. - (package-menu--refresh t nil) - (let (matched) - (dolist (entry tabulated-list-entries) - (let* ((pkg-name (package-desc-name (car entry)))) - (when (string-match name (symbol-name pkg-name)) - (push pkg-name matched)))) - (if matched - (package-show-package-list matched nil) - (user-error "No packages found"))))) + (package-menu--generate t t) + (package-menu--filter-by (lambda (pkg-desc) + (string-match-p name (symbol-name + (package-desc-name pkg-desc)))) + (format "name:%s" name)))) + +(defun package-menu-filter-by-status (status) + "Filter the \"*Packages*\" buffer by STATUS. +Display only packages with specified STATUS. + +When called interactively, prompt for STATUS, which can be a +comma-separated string. If STATUS is empty, show all packages. + +When called from Lisp, STATUS can be a string or a list of +strings. If STATUS is nil or the empty string, show all +packages." + (interactive (list (completing-read "Filter by status: " + '("avail-obso" + "available" + "built-in" + "dependency" + "disabled" + "external" + "held" + "incompat" + "installed" + "new" + "unsigned")))) + (package--ensure-package-menu-mode) + (if (or (not status) (string-empty-p status)) + (package-menu--generate t t) + (package-menu--filter-by (lambda (pkg-desc) + (string-match-p status (package-desc-status pkg-desc))) + (format "status:%s" status)))) + +(defun package-menu-filter-by-version (version predicate) + "Filter the \"*Packages*\" buffer by VERSION and PREDICATE. +Display only packages with a matching version. + +When called interactively, prompt for one of the qualifiers `<', +`>' or `=', and a package version. Show only packages that has a +lower (`<'), equal (`=') or higher (`>') version than the +specified one. + +When called from Lisp, VERSION should be a version string and +PREDICATE should be the symbol `=', `<' or `>'. + +If VERSION is nil or the empty string, show all packages." + (interactive (let ((choice (intern + (char-to-string + (read-char-choice + "Filter by version? [Type =, <, > or q] " + '(?< ?> ?= ?q)))))) + (if (eq choice 'q) + '(quit nil) + (list (read-from-minibuffer + (concat "Filter by version (" + (pcase choice + ('= "= equal to") + ('< "< less than") + ('> "> greater than")) + "): ")) + choice)))) + (unless (equal predicate 'quit) + (if (or (not version) (string-empty-p version)) + (package-menu--generate t t) + (package-menu--filter-by + (let ((fun (pcase predicate + ('= 'version-list-=) + ('< 'version-list-<) + ('> '(lambda (a b) (not (version-list-<= a b)))) + (_ (error "Unknown predicate: %s" predicate)))) + (ver (version-to-list version))) + (lambda (pkg-desc) + (funcall fun (package-desc-version pkg-desc) ver))) + (format "versions:%s%s" predicate version))))) (defun package-menu-clear-filter () "Clear any filter currently applied to the \"*Packages*\" buffer." @@ -3760,6 +3890,7 @@ package-get-version (or (lm-header "package-version") (lm-header "version"))))))))) + ;;;; Quickstart: precompute activation actions for faster start up. ;; Activating packages via `package-initialize' is costly: for N installed diff --git a/test/lisp/emacs-lisp/package-tests.el b/test/lisp/emacs-lisp/package-tests.el index 7d354d6ecd..adf917aef4 100644 --- a/test/lisp/emacs-lisp/package-tests.el +++ b/test/lisp/emacs-lisp/package-tests.el @@ -349,43 +349,102 @@ package-test-install-multifile (goto-char (point-min)) (should (re-search-forward re nil t))))))) + +;;; Package Menu tests + +(defmacro with-package-menu-test (&rest body) + "Set up Package Menu (\"*Packages*\") buffer for testing." + (declare (indent 0) (debug (([&rest form]) body))) + `(with-package-test () + (let ((buf (package-list-packages))) + (unwind-protect + (progn ,@body) + (kill-buffer buf))))) + (ert-deftest package-test-update-listing () "Ensure installed package status is updated." - (with-package-test () - (let ((buf (package-list-packages))) - (search-forward-regexp "^ +simple-single") - (package-menu-mark-install) - (package-menu-execute) - (run-hooks 'post-command-hook) - (should (package-installed-p 'simple-single)) - (switch-to-buffer "*Packages*") - (goto-char (point-min)) - (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t)) - (goto-char (point-min)) - (should-not (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+\\(available\\|new\\)" nil t)) - (kill-buffer buf)))) + (with-package-menu-test + (search-forward-regexp "^ +simple-single") + (package-menu-mark-install) + (package-menu-execute) + (run-hooks 'post-command-hook) + (should (package-installed-p 'simple-single)) + (switch-to-buffer "*Packages*") + (goto-char (point-min)) + (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t)) + (goto-char (point-min)) + (should-not (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+\\(available\\|new\\)" nil t)))) + +(ert-deftest package-test-list-filter-by-archive () + "Ensure package list is filtered correctly by archive version." + (with-package-menu-test + ;; TODO: Add another package archive to test filtering, because + ;; the testing environment currently only has one. + (package-menu-filter-by-archive "gnu") + (goto-char (point-min)) + (should (looking-at "^\\s-+multi-file")) + (should (= (count-lines (point-min) (point-max)) 4)) + (should-error (package-menu-filter-by-archive "non-existent archive")))) + +(ert-deftest package-test-list-filter-by-keyword () + "Ensure package list is filtered correctly by package keyword." + (with-package-menu-test + (package-menu-filter-by-keyword "frobnicate") + (goto-char (point-min)) + (should (re-search-forward "^\\s-+simple-single" nil t)) + (should (= (count-lines (point-min) (point-max)) 1)) + (should-error (package-menu-filter-by-keyword "non-existent-keyword")))) (ert-deftest package-test-list-filter-by-name () "Ensure package list is filtered correctly by package name." - (with-package-test () - (let ((buf (package-list-packages))) - (package-menu-filter-by-name "tetris") - (goto-char (point-min)) - (should (re-search-forward "^\\s-+tetris" nil t)) - (should (= (count-lines (point-min) (point-max)) 1)) - (kill-buffer buf)))) + (with-package-menu-test () + (package-menu-filter-by-name "tetris") + (goto-char (point-min)) + (should (re-search-forward "^\\s-+tetris" nil t)) + (should (= (count-lines (point-min) (point-max)) 1)))) + +(ert-deftest package-test-list-filter-by-status () + "Ensure package list is filtered correctly by package status." + (with-package-menu-test + (package-menu-filter-by-status "available") + (goto-char (point-min)) + (should (re-search-forward "^\\s-+multi-file" nil t)) + (should (= (count-lines (point-min) (point-max)) 4)) + ;; No installed packages in default environment. + (should-error (package-menu-filter-by-status "installed")))) + +(ert-deftest package-test-list-filter-by-version () + (with-package-menu-test + (should-error (package-menu-filter-by-version "1.1" 'unknown-symbol))) ) + +(defun package-test-filter-by-version (version predicate name) + (with-package-menu-test + (package-menu-filter-by-version version predicate) + (goto-char (point-min)) + ;; We just check that the given package is included in the + ;; listing. One could be more ambitious. + (should (re-search-forward name)))) + +(ert-deftest package-test-list-filter-by-version-= () + "Ensure package list is filtered correctly by package version (=)." + (package-test-filter-by-version "1.1" '= "^\\s-+simple-two-depend")) + +(ert-deftest package-test-list-filter-by-version-< () + "Ensure package list is filtered correctly by package version (<)." + (package-test-filter-by-version "1.2" '< "^\\s-+simple-two-depend")) + +(ert-deftest package-test-list-filter-by-version-> () + "Ensure package list is filtered correctly by package version (>)." + (package-test-filter-by-version "1.0" '> "^\\s-+simple-two-depend")) (ert-deftest package-test-list-clear-filter () "Ensure package list filter is cleared correctly." - (with-package-test () - (let ((buf (package-list-packages))) - (let ((num-packages (count-lines (point-min) (point-max)))) - (should (> num-packages 1)) - (package-menu-filter-by-name "tetris") - (should (= (count-lines (point-min) (point-max)) 1)) - (package-menu-clear-filter) - (should (= (count-lines (point-min) (point-max)) num-packages))) - (kill-buffer buf)))) + (with-package-menu-test + (let ((num-packages (count-lines (point-min) (point-max)))) + (package-menu-filter-by-name "tetris") + (should (= (count-lines (point-min) (point-max)) 1)) + (package-menu-clear-filter) + (should (= (count-lines (point-min) (point-max)) num-packages))))) (ert-deftest package-test-update-archives () "Test updating package archives." -- 2.20.1 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 31 08:55:10 2020 Received: (at 38424) by debbugs.gnu.org; 31 Jan 2020 13:55:10 +0000 Received: from localhost ([127.0.0.1]:36692 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixWlJ-0001Dd-8f for submit@debbugs.gnu.org; Fri, 31 Jan 2020 08:55:10 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57138) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixWlG-0001DL-JO for 38424@debbugs.gnu.org; Fri, 31 Jan 2020 08:55:07 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45762) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ixWlB-0007WW-8V; Fri, 31 Jan 2020 08:55:01 -0500 Received: from [176.228.60.248] (port=4109 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ixWlA-0004qV-Ov; Fri, 31 Jan 2020 08:55:01 -0500 Date: Fri, 31 Jan 2020 15:54:40 +0200 Message-Id: <83d0azloin.fsf@gnu.org> From: Eli Zaretskii To: Stefan Kangas In-reply-to: <877e1g8gei.fsf@marxist.se> (message from Stefan Kangas on Sat, 25 Jan 2020 02:37:57 +0100) Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> <83fti3ncfp.fsf@gnu.org> <877e1g8gei.fsf@marxist.se> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > From: Stefan Kangas > Cc: 38424@debbugs.gnu.org > Date: Sat, 25 Jan 2020 02:37:57 +0100 > > Please find attached an updated patch. I hope it's more > straightforward to review. Thanks, since no one of those who use package.el and know more than I do about its internals voice any objections, I guess this is good to go. From debbugs-submit-bounces@debbugs.gnu.org Wed Feb 05 07:36:44 2020 Received: (at 38424) by debbugs.gnu.org; 5 Feb 2020 12:36:44 +0000 Received: from localhost ([127.0.0.1]:45198 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1izJvA-0006cw-Hd for submit@debbugs.gnu.org; Wed, 05 Feb 2020 07:36:44 -0500 Received: from ted.gofardesign.uk ([67.225.143.91]:45930) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1izJv8-0006ce-Lo; Wed, 05 Feb 2020 07:36:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=marxist.se; s=default; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=TOQnbF5ErxUS4zwuqcT+aTP65IgegPVOAQqiW5Q1UHY=; b=dP7aIKRc4MBgtE2zenFPrsQ0+p 2HHNNmFwu7NFHnevgYSwYmA9aDOp8zPaDojLbHzH/ABXlKC/XcpfsMqGXZDDIcoNoyOguH0Odyjax uRHc1cs7Z8gqABhQDsirFj6UNoSzTaGEIvM/LUmb1Gj8AQ0zGmv1S7VD3378oZEVpwEK3I+GGDzzZ P57NU1QcE7wGriyga741z16hlK7lvVTz/9L92ilH0KM2KgR/nTiKxvekZaFLwibsxdUB6/DvnLZ52 RdwHbgbM3qBckxN2ch6xNrxDQwYUZsES9b8/tC3JSSUESv8rbKwFE5W5EJoccyAg/4EZjeGTmekZZ qnTjUy1g==; Received: from h-70-69.a785.priv.bahnhof.se ([155.4.70.69]:46854 helo=localhost) by ted.gofardesign.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1izJv0-001PK1-RF; Wed, 05 Feb 2020 07:36:35 -0500 From: Stefan Kangas To: Eli Zaretskii Subject: Re: bug#38424: [PATCH] Add new filter functions to Package Menu In-Reply-To: <83d0azloin.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 31 Jan 2020 15:54:40 +0200") References: <837e3ho8vv.fsf@gnu.org> <871rtoi9j9.fsf@marxist.se> <83fti3ncfp.fsf@gnu.org> <877e1g8gei.fsf@marxist.se> <83d0azloin.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Date: Wed, 05 Feb 2020 13:36:32 +0100 Message-ID: <87k1516wj3.fsf@marxist.se> MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - ted.gofardesign.uk X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - marxist.se X-Get-Message-Sender-Via: ted.gofardesign.uk: authenticated_id: stefan@marxist.se X-Authenticated-Sender: ted.gofardesign.uk: stefan@marxist.se X-Source: X-Source-Args: X-Source-Dir: X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: close 38424 28.1 thanks Eli Zaretskii writes: > Thanks, since no one of those who use package.el and know more than I > do about its internals voice any objections, I guess this is good to > go. Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: gnu.org] 1.3 RCVD_IN_RP_RNBL RBL: Relay in RNBL, https://senderscore.org/blacklistlookup/ [67.225.143.91 listed in bl.score.senderscore.com] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-Debbugs-Envelope-To: 38424 Cc: 38424@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) close 38424 28.1 thanks Eli Zaretskii writes: > Thanks, since no one of those who use package.el and know more than I > do about its internals voice any objections, I guess this is good to > go. Thanks. Pushed to master as commit aea12d4903. Best regards, Stefan Kangas From unknown Sat Jun 14 03:55:21 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 05 Mar 2020 12:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator