From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Bavier Subject: Re: [PATCH] guix: lint: Check for version-only origin file names. Date: Thu, 10 Sep 2015 15:50:58 -0500 Message-ID: <20150910155058.0a7c99b0@openmailbox.org> References: <1440371134-2699-1-git-send-email-ericbavier@openmailbox.org> <87pp2cmgss.fsf@netris.org> <20150824191024.3da87f41@openmailbox.org> <87y4gvvonz.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/Hj9o6KucSRshc5bpxTRrk4L" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46480) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZaDNj-000661-N0 for guix-devel@gnu.org; Thu, 10 Sep 2015 21:44:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZaDNg-0005NC-9r for guix-devel@gnu.org; Thu, 10 Sep 2015 21:44:03 -0400 Received: from smtp21.openmailbox.org ([62.4.1.55]:34325) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZaDNf-0005MY-Pn for guix-devel@gnu.org; Thu, 10 Sep 2015 21:44:00 -0400 In-Reply-To: <87y4gvvonz.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Ludovic =?UTF-8?B?Q291cnTDqHM=?= Cc: guix-devel@gnu.org --MP_/Hj9o6KucSRshc5bpxTRrk4L Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Fri, 28 Aug 2015 09:48:48 +0200 ludo@gnu.org (Ludovic Court=C3=A8s) wrote: > Eric Bavier skribis: >=20 > > From 0311d5b383003600ac43d3a9bfdec0ad3c398db2 Mon Sep 17 00:00:00 2001 > > From: Eric Bavier > > Date: Sun, 23 Aug 2015 18:00:45 -0500 > > Subject: [PATCH] guix: lint: Check for version-only origin file names. > > > > * guix/scripts/lint.scm (check-source): Emit warning if source filename > > contains only the version of the package. > > * tests/lint.scm ("source: filename", "source: filename v", > > "source: filename valid"): New tests. > > * doc/guix.texi (Invoking guix lint): Mention file name check. > > Offending packages updated. >=20 > This is useful, thanks for looking into it. Thanks for the review! =20 > I would prefer it to make a separate linter, like =E2=80=98source-file-na= me=E2=80=99. > The reason is that =E2=80=98source=E2=80=99 is a relatively expensive che= ck, since it > needs to probe URLs (so you might want to skip it in some cases), > whereas the linter your propose is lightweight. Makes sense. >=20 > > --- a/gnu/packages/algebra.scm > > +++ b/gnu/packages/algebra.scm > > @@ -386,6 +386,7 @@ cosine/ sine transforms or DCT/DST).") > > (method url-fetch) > > (uri (string-append "https://bitbucket.org/eigen/eigen/g= et/" > > version ".tar.bz2")) > > + (file-name (string-append name "-" version ".tar.bz2")) >=20 > Could you make these package updates a separate patch? Some may trigger > large rebuilds, so you may have to keep them for =E2=80=98core-updates=E2= =80=99 or such. I've left the package updates out of the attached patches. >=20 > > + (define (origin-version-name? origin) > > + ;; Return #t if the source file name contains only a version; indi= cates > > + ;; that the origin needs a 'file-name' field. > > + (let ((filename (store-path-package-name > > + (with-store store > > + (derivation->output-path > > + (package-source-derivation store origin))))) > > + (version (package-version package))) > > + (or (string-prefix? version filename) > > + ;; Common in many projects is for the filename to start with= a "v" > > + ;; followed by the version, e.g. "v3.2.0.tar.gz". > > + (string-prefix? (string-append "v" version) filename)))) >=20 > Opening a connection to the store in the middle of the code > (=E2=80=98with-store=E2=80=99) is Bad Practice. ;-) >=20 > I think this can actually be made simpler, with something akin to what > =E2=80=98node-full-name=E2=80=99 does in guix/scripts/graph.scm. Maybe w= e could extract > an =E2=80=98origin-actual-file-name=E2=80=99 procedure from that and move= it to (guix > packages). WDYT? The first attached patch does this. Is using the basename of the source URI always accurate? I.e. are there cases where the store file name might not match the URI's basename? This uncertainty, I think, is what caused me to use store-path-package-name initially. This revised patch might actually be considered "more accurate" in that the checker now flags origins from 'git-reference' et al where no 'file-name' field is declared. `~Eric --MP_/Hj9o6KucSRshc5bpxTRrk4L Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-guix-packages-Add-origin-actual-file-name.patch RnJvbSA4ZGIzZTU5NzgzOTRiOTlhZDE0ZDY5NDk0YjAwMzQzYjcwZjkxOGUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgpE YXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE1OjM5OjQ0IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IGd1aXg6IHBhY2thZ2VzOiBBZGQgb3JpZ2luLWFjdHVhbC1maWxlLW5hbWUuCgoqIGd1aXgvc2Ny aXB0cy9ncmFwaC5zY20gKHVyaS0+ZmlsZS1uYW1lLCBub2RlLWZ1bGwtbmFtZSk6IE1vdmUgb3Jp Z2luIGZpbGUKICBuYW1lIGxvZ2ljIHRvLi4uCiogZ3VpeC9wYWNrYWdlcy5zY20gKG9yaWdpbi1h Y3R1YWwtZmlsZS1uYW1lKTogLi4uaGVyZS4KLS0tCiBndWl4L3BhY2thZ2VzLnNjbSAgICAgIHwg MjIgKysrKysrKysrKysrKysrKysrKysrKwogZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbSB8IDE1ICst LS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxNCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ndWl4L3BhY2thZ2VzLnNjbSBiL2d1aXgvcGFja2FnZXMu c2NtCmluZGV4IGU0NjZmZmUuLmVkY2I1M2UgMTAwNjQ0Ci0tLSBhL2d1aXgvcGFja2FnZXMuc2Nt CisrKyBiL2d1aXgvcGFja2FnZXMuc2NtCkBAIC0zNyw2ICszNyw3IEBACiAgICM6dXNlLW1vZHVs ZSAoc3JmaSBzcmZpLTI2KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNCkKICAgIzp1c2Ut bW9kdWxlIChzcmZpIHNyZmktMzUpCisgICM6dXNlLW1vZHVsZSAod2ViIHVyaSkKICAgIzpyZS1l eHBvcnQgKCVjdXJyZW50LXN5c3RlbQogICAgICAgICAgICAgICAgJWN1cnJlbnQtdGFyZ2V0LXN5 c3RlbQogICAgICAgICAgICAgICAgc2VhcmNoLXBhdGgtc3BlY2lmaWNhdGlvbikgICAgICAgICA7 Zm9yIGNvbnZlbmllbmNlCkBAIC00Niw2ICs0Nyw3IEBACiAgICAgICAgICAgICBvcmlnaW4tbWV0 aG9kCiAgICAgICAgICAgICBvcmlnaW4tc2hhMjU2CiAgICAgICAgICAgICBvcmlnaW4tZmlsZS1u YW1lCisgICAgICAgICAgICBvcmlnaW4tYWN0dWFsLWZpbGUtbmFtZQogICAgICAgICAgICAgb3Jp Z2luLXBhdGNoZXMKICAgICAgICAgICAgIG9yaWdpbi1wYXRjaC1mbGFncwogICAgICAgICAgICAg b3JpZ2luLXBhdGNoLWlucHV0cwpAQCAtMTg4LDYgKzE5MCwyNiBAQCByZXByZXNlbnRhdGlvbi4i CiAgICAgICAoKF8gc3RyKQogICAgICAgICMnKG5peC1iYXNlMzItc3RyaW5nLT5ieXRldmVjdG9y IHN0cikpKSkpCiAKKyhkZWZpbmUgKG9yaWdpbi1hY3R1YWwtZmlsZS1uYW1lIG9yaWdpbikKKyAg IlJldHVybiB0aGUgZmlsZSBuYW1lIG9mIE9SSUdJTiwgZWl0aGVyIGl0cyAnZmlsZS1uYW1lJyBm aWVsZCBvciB0aGUgZmlsZQorbmFtZSBvZiBpdHMgVVJJLiIKKyAgKGRlZmluZSAodXJpLT5maWxl LW5hbWUgdXJpKQorICAgIDs7IFJldHVybiB0aGUgJ2Jhc2UgbmFtZScgb2YgVVJJIG9yIFVSSSBp dHNlbGYsIHdoZXJlIFVSSSBpcyBhIHN0cmluZy4KKyAgICAobGV0ICgocGF0aCAoYW5kPT4gKHN0 cmluZy0+dXJpIHVyaSkgdXJpLXBhdGgpKSkKKyAgICAgIChpZiBwYXRoCisgICAgICAgICAgKGJh c2VuYW1lIHBhdGgpCisgICAgICAgICAgdXJpKSkpCisKKyAgKG9yIChvcmlnaW4tZmlsZS1uYW1l IG9yaWdpbikKKyAgICAgIChtYXRjaCAob3JpZ2luLXVyaSBvcmlnaW4pCisgICAgICAgICgoaGVh ZCAuIHRhaWwpCisgICAgICAgICAodXJpLT5maWxlLW5hbWUgaGVhZCkpCisgICAgICAgICgoPyBz dHJpbmc/IHVyaSkKKyAgICAgICAgICh1cmktPmZpbGUtbmFtZSB1cmkpKQorICAgICAgICAoZWxz ZQorICAgICAgICAgOzsgZ2l0LCBzdm4sIGN2cywgZXRjLiByZWZlcmVuY2UKKyAgICAgICAgICNm KSkpKQorCiAoZGVmaW5lICVzdXBwb3J0ZWQtc3lzdGVtcwogICA7OyBUaGlzIGlzIHRoZSBsaXN0 IG9mIHN5c3RlbSB0eXBlcyB0aGF0IGFyZSBzdXBwb3J0ZWQuICBCeSBkZWZhdWx0LCB3ZQogICA7 OyBleHBlY3QgYWxsIHBhY2thZ2VzIHRvIGJ1aWxkIHN1Y2Nlc3NmdWxseSBoZXJlLgpkaWZmIC0t Z2l0IGEvZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbSBiL2d1aXgvc2NyaXB0cy9ncmFwaC5zY20KaW5k ZXggMmI2NzFiZS4uY2RkZDYzZSAxMDA2NDQKLS0tIGEvZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbQor KysgYi9ndWl4L3NjcmlwdHMvZ3JhcGguc2NtCkBAIC0zMyw3ICszMyw2IEBACiAgICM6dXNlLW1v ZHVsZSAoc3JmaSBzcmZpLTM0KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNykKICAgIzp1 c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKLSAgIzp1c2UtbW9kdWxlICh3ZWIgdXJpKQogICAjOmV4 cG9ydCAoJXBhY2thZ2Utbm9kZS10eXBlCiAgICAgICAgICAgICAlYmFnLW5vZGUtdHlwZQogICAg ICAgICAgICAgJWJhZy1lbWVyZ2VkLW5vZGUtdHlwZQpAQCAtNzgsMjUgKzc3LDEzIEBACiA7Ozsg UGFja2FnZSBEQUcuCiA7OzsKIAotKGRlZmluZSAodXJpLT5maWxlLW5hbWUgdXJpKQotICAiUmV0 dXJuIHRoZSAnYmFzZSBuYW1lJyBvZiBVUkkgb3IgVVJJIGl0c2VsZiwgd2hlcmUgVVJJIGlzIGEg c3RyaW5nLiIKLSAgKGxldCAoKHBhdGggKGFuZD0+IChzdHJpbmctPnVyaSB1cmkpIHVyaS1wYXRo KSkpCi0gICAgKGlmIHBhdGgKLSAgICAgICAgKGJhc2VuYW1lIHBhdGgpCi0gICAgICAgIHVyaSkp KQotCiAoZGVmaW5lIChub2RlLWZ1bGwtbmFtZSB0aGluZykKICAgIlJldHVybiBhIGh1bWFuLXJl YWRhYmxlIG5hbWUgdG8gZGVub3RlIFRISU5HLCBhIHBhY2thZ2UsIG9yaWdpbiwgb3IgZmlsZQog bmFtZS4iCiAgIChjb25kICgocGFja2FnZT8gdGhpbmcpCiAgICAgICAgICAocGFja2FnZS1mdWxs LW5hbWUgdGhpbmcpKQogICAgICAgICAoKG9yaWdpbj8gdGhpbmcpCi0gICAgICAgICAob3IgKG9y aWdpbi1maWxlLW5hbWUgdGhpbmcpCi0gICAgICAgICAgICAgKG1hdGNoIChvcmlnaW4tdXJpIHRo aW5nKQotICAgICAgICAgICAgICAgKChoZWFkIC4gdGFpbCkKLSAgICAgICAgICAgICAgICAodXJp LT5maWxlLW5hbWUgaGVhZCkpCi0gICAgICAgICAgICAgICAoKD8gc3RyaW5nPyB1cmkpCi0gICAg ICAgICAgICAgICAgKHVyaS0+ZmlsZS1uYW1lIHVyaSkpKSkpCisgICAgICAgICAob3JpZ2luLWFj dHVhbC1maWxlLW5hbWUgdGhpbmcpKQogICAgICAgICAoKHN0cmluZz8gdGhpbmcpICAgICAgICAg ICAgICAgICAgICAgICAgICA7ZmlsZSBuYW1lCiAgICAgICAgICAob3IgKGJhc2VuYW1lIHRoaW5n KQogICAgICAgICAgICAgIChlcnJvciAiYmFzZW5hbWUiIHRoaW5nKSkpCi0tIAoyLjQuMwoK --MP_/Hj9o6KucSRshc5bpxTRrk4L Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0002-guix-lint-Check-for-meaningful-origin-file-names.patch RnJvbSAwM2MzZjJiMjFhMjQ2NzY3NTA5MjgzMGFlYTJkZGYxOTJlMTMzZmY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgpE YXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE1OjM0OjU4IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAyLzJd IGd1aXg6IGxpbnQ6IENoZWNrIGZvciBtZWFuaW5nZnVsIG9yaWdpbiBmaWxlIG5hbWVzLgoKKiBn dWl4L3NjcmlwdHMvbGludC5zY20gKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUpOiBOZXcgcHJvY2Vk dXJlLgogICglY2hlY2tlcnMpOiBBZGQgJ3NvdXJjZS1maWxlLW5hbWUnIGNoZWNrZXIuCiogdGVz dHMvbGludC5zY20gKCJzb3VyY2U6IGZpbGUgbmFtZSIsICJzb3VyY2U6IGZpbGUgbmFtZSB2IikK ICAoInNvdXJjZTogZmlsZSBuYW1lIHZhbGlkIiwgInNvdXJjZTogZmlsZSBuYW1lIGJhZCBjaGVj a291dCIpCiAgKCJzb3VyY2U6IGZpbGUgbmFtZSBnb29kIGNoZWNrb3V0Iik6IE5ldyB0ZXN0cy4K KiBkb2MvZ3VpeC50ZXhpIChJbnZva2luZyBndWl4IGxpbnQpOiBNZW50aW9uIGZpbGUgbmFtZSBj aGVjay4KLS0tCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgfCAgNSArKystCiBndWl4L3NjcmlwdHMv bGludC5zY20gfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLQogdGVzdHMvbGludC5zY20gICAgICAgIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDEzMyBpbnNlcnRp b25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9j L2d1aXgudGV4aQppbmRleCA5YWU5MWE4Li42YzU2M2E5IDEwMDY0NAotLS0gYS9kb2MvZ3VpeC50 ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTQyMTcsOCArNDIxNywxMSBAQCBJZGVudGlmeSBp bnB1dHMgdGhhdCBzaG91bGQgbW9zdCBsaWtlbHkgYmUgbmF0aXZlIGlucHV0cy4KIAogQGl0ZW0g c291cmNlCiBAaXRlbXggaG9tZS1wYWdlCitAaXRlbXggc291cmNlLWZpbGUtbmFtZQogUHJvYmUg QGNvZGV7aG9tZS1wYWdlfSBhbmQgQGNvZGV7c291cmNlfSBVUkxzIGFuZCByZXBvcnQgdGhvc2Ug dGhhdCBhcmUKLWludmFsaWQuCitpbnZhbGlkLiAgQ2hlY2sgdGhhdCB0aGUgc291cmNlIGZpbGUg bmFtZSBpcyBtZWFuaW5nZnVsLCBlLmcuIGlzIG5vdAoranVzdCBhIHZlcnNpb24gbnVtYmVyIG9y IGBgZ2l0LWNoZWNrb3V0JycsIGFuZCBzaG91bGQgbm90IGhhdmUgYQorQGNvZGV7ZmlsZS1uYW1l fSBkZWNsYXJlZCAoQHB4cmVme29yaWdpbiBSZWZlcmVuY2V9KS4KIAogQGl0ZW0gZm9ybWF0dGlu ZwogV2FybiBhYm91dCBvYnZpb3VzIHNvdXJjZSBjb2RlIGZvcm1hdHRpbmcgaXNzdWVzOiB0cmFp bGluZyB3aGl0ZSBzcGFjZSwKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9saW50LnNjbSBiL2d1 aXgvc2NyaXB0cy9saW50LnNjbQppbmRleCAyYTYxOGM5Li42YWRlYTE0IDEwMDY0NAotLS0gYS9n dWl4L3NjcmlwdHMvbGludC5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL2xpbnQuc2NtCkBAIC0xLDYg KzEsNiBAQAogOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBm b3IgR05VCiA7OzsgQ29weXJpZ2h0IMKpIDIwMTQgQ3lyaWwgUm9lbGFuZHQgPHRpcGVjYW1sQGdt YWlsLmNvbT4KLTs7OyBDb3B5cmlnaHQgwqkgMjAxNCBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJl ci5mc2Yub3JnPgorOzs7IENvcHlyaWdodCDCqSAyMDE0LCAyMDE1IEVyaWMgQmF2aWVyIDxiYXZp ZXJAbWVtYmVyLmZzZi5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTMsIDIwMTQsIDIwMTUgTHVk b3ZpYyBDb3VydMOocyA8bHVkb0BnbnUub3JnPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR05VIEd1aXguCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgICAgICAgICBjaGVjay1kZXJpdmF0 aW9uCiAgICAgICAgICAgICBjaGVjay1ob21lLXBhZ2UKICAgICAgICAgICAgIGNoZWNrLXNvdXJj ZQorICAgICAgICAgICAgY2hlY2stc291cmNlLWZpbGUtbmFtZQogICAgICAgICAgICAgY2hlY2st bGljZW5zZQogICAgICAgICAgICAgY2hlY2stZm9ybWF0dGluZwogCkBAIC00NzYsMzAgKzQ3Nyw1 MCBAQCBkZXNjcmlwdGlvbnMgbWFpbnRhaW5lZCB1cHN0cmVhbS4iCiAgICAgICAnKCkpKQogCiAg IChsZXQgKChvcmlnaW4gKHBhY2thZ2Utc291cmNlIHBhY2thZ2UpKSkKLSAgICAod2hlbiAoYW5k IG9yaWdpbgotICAgICAgICAgICAgICAgKGVxdj8gKG9yaWdpbi1tZXRob2Qgb3JpZ2luKSB1cmwt ZmV0Y2gpKQotICAgICAgKGxldCogKChzdHJpbmdzIChvcmlnaW4tdXJpIG9yaWdpbikpCi0gICAg ICAgICAgICAgKHVyaXMgKGlmIChsaXN0PyBzdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICAg ICAobWFwIHN0cmluZy0+dXJpIHN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgIChsaXN0 IChzdHJpbmctPnVyaSBzdHJpbmdzKSkpKSkKLQotICAgICAgICA7OyBKdXN0IG1ha2Ugc3VyZSB0 aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgVVJJcyBpcyB2YWxpZC4KLSAgICAgICAgKGNhbGwtd2l0 aC12YWx1ZXMKLSAgICAgICAgICAgIChsYW1iZGEgKCkgKHRyeS11cmlzIHVyaXMpKQotICAgICAg ICAgIChsYW1iZGEgKHN1Y2Nlc3M/IHdhcm5pbmdzKQotICAgICAgICAgICAgOzsgV2hlbiBldmVy eXRoaW5nIGZhaWxzLCByZXBvcnQgYWxsIG9mIFdBUk5JTkdTLCBvdGhlcndpc2UgZG9uJ3QKLSAg ICAgICAgICAgIDs7IHJlcG9ydCBhbnl0aGluZy4KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAg ICA7OyBYWFg6IElkZWFsbHkgd2UnZCBzdGlsbCBhbGxvdyB3YXJuaW5ncyB0byBiZSByYWlzZWQg aWYgKnNvbWUqCi0gICAgICAgICAgICA7OyBVUklzIGFyZSB1bnJlYWNoYWJsZSwgYnV0IGRpc3Rp bmd1aXNoIHRoYXQgZnJvbSB0aGUgZXJyb3IgY2FzZQotICAgICAgICAgICAgOzsgd2hlcmUgKmFs bCogdGhlIFVSSXMgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgKHVubGVzcyBzdWNjZXNz PwotICAgICAgICAgICAgICAoZW1pdC13YXJuaW5nIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoXyAiYWxsIHRoZSBzb3VyY2UgVVJJcyBhcmUgdW5yZWFjaGFibGU6IikKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlKQotICAgICAgICAgICAgICAoZm9yLWVh Y2ggKGxhbWJkYSAod2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc3BsYXkg d2FybmluZyAoZ3VpeC13YXJuaW5nLXBvcnQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIChy ZXZlcnNlIHdhcm5pbmdzKSkpKSkpKSkpCisgICAgKHdoZW4gb3JpZ2luCisgICAgICAoaWYgKGVx dj8gKG9yaWdpbi1tZXRob2Qgb3JpZ2luKSB1cmwtZmV0Y2gpCisgICAgICAgICAgKGxldCogKChz dHJpbmdzIChvcmlnaW4tdXJpIG9yaWdpbikpCisgICAgICAgICAgICAgICAgICh1cmlzIChpZiAo bGlzdD8gc3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgc3RyaW5nLT51 cmkgc3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IChzdHJpbmctPnVy aSBzdHJpbmdzKSkpKSkKKworICAgICAgICAgICAgOzsgSnVzdCBtYWtlIHN1cmUgdGhhdCBhdCBs ZWFzdCBvbmUgb2YgdGhlIFVSSXMgaXMgdmFsaWQuCisgICAgICAgICAgICAoY2FsbC13aXRoLXZh bHVlcworICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKHRyeS11cmlzIHVyaXMpKQorICAgICAg ICAgICAgICAobGFtYmRhIChzdWNjZXNzPyB3YXJuaW5ncykKKyAgICAgICAgICAgICAgICA7OyBX aGVuIGV2ZXJ5dGhpbmcgZmFpbHMsIHJlcG9ydCBhbGwgb2YgV0FSTklOR1MsIG90aGVyd2lzZSBk b24ndAorICAgICAgICAgICAgICAgIDs7IHJlcG9ydCBhbnl0aGluZy4KKyAgICAgICAgICAgICAg ICA7OworICAgICAgICAgICAgICAgIDs7IFhYWDogSWRlYWxseSB3ZSdkIHN0aWxsIGFsbG93IHdh cm5pbmdzIHRvIGJlIHJhaXNlZCBpZiAqc29tZSoKKyAgICAgICAgICAgICAgICA7OyBVUklzIGFy ZSB1bnJlYWNoYWJsZSwgYnV0IGRpc3Rpbmd1aXNoIHRoYXQgZnJvbSB0aGUgZXJyb3IgY2FzZQor ICAgICAgICAgICAgICAgIDs7IHdoZXJlICphbGwqIHRoZSBVUklzIGFyZSB1bnJlYWNoYWJsZS4K KyAgICAgICAgICAgICAgICAodW5sZXNzIHN1Y2Nlc3M/CisgICAgICAgICAgICAgICAgICAoZW1p dC13YXJuaW5nIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF8gImFs bCB0aGUgc291cmNlIFVSSXMgYXJlIHVucmVhY2hhYmxlOiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdzb3VyY2UpCisgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKGxhbWJk YSAod2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5IHdhcm5p bmcgKGd1aXgtd2FybmluZy1wb3J0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJl dmVyc2Ugd2FybmluZ3MpKSkpKSkpKSkpCisKKyhkZWZpbmUgKGNoZWNrLXNvdXJjZS1maWxlLW5h bWUgcGFja2FnZSkKKyAgIkVtaXQgYSB3YXJuaW5nIGlmIFBBQ0tBR0UncyBvcmlnaW4gaGFzIGEg dmVyc2lvbi1vbmx5IGZpbGUgbmFtZS4iCisgIChkZWZpbmUgKG9yaWdpbi1maWxlLW5hbWUtdmFs aWQ/IG9yaWdpbikKKyAgICA7OyBSZXR1cm4gI3QgaWYgdGhlIHNvdXJjZSBmaWxlIG5hbWUgY29u dGFpbnMgb25seSBhIHZlcnNpb247IGluZGljYXRlcworICAgIDs7IHRoYXQgdGhlIG9yaWdpbiBu ZWVkcyBhICdmaWxlLW5hbWUnIGZpZWxkLgorICAgIChsZXQgKChmaWxlLW5hbWUgKG9yaWdpbi1h Y3R1YWwtZmlsZS1uYW1lIG9yaWdpbikpCisgICAgICAgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVy c2lvbiBwYWNrYWdlKSkpCisgICAgICAoYW5kIGZpbGUtbmFtZQorICAgICAgICAgICAobm90IChv ciAoc3RyaW5nLXByZWZpeD8gdmVyc2lvbiBmaWxlLW5hbWUpCisgICAgICAgICAgICAgICAgICAg IDs7IENvbW1vbiBpbiBtYW55IHByb2plY3RzIGlzIGZvciB0aGUgZmlsZW5hbWUgdG8gc3RhcnQK KyAgICAgICAgICAgICAgICAgICAgOzsgd2l0aCBhICJ2IiBmb2xsb3dlZCBieSB0aGUgdmVyc2lv biwKKyAgICAgICAgICAgICAgICAgICAgOzsgZS5nLiAidjMuMi4wLnRhci5neiIuCisgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctcHJlZml4PyAoc3RyaW5nLWFwcGVuZCAidiIgdmVyc2lvbikg ZmlsZS1uYW1lKSkpKSkpCisKKyAgKGxldCAoKG9yaWdpbiAocGFja2FnZS1zb3VyY2UgcGFja2Fn ZSkpKQorICAgICh1bmxlc3MgKG9yIChub3Qgb3JpZ2luKSAob3JpZ2luLWZpbGUtbmFtZS12YWxp ZD8gb3JpZ2luKSkKKyAgICAgIChlbWl0LXdhcm5pbmcgcGFja2FnZQorICAgICAgICAgICAgICAg ICAgICAoXyAidGhlIHNvdXJjZSBmaWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2Ug bmFtZSIpCisgICAgICAgICAgICAgICAgICAgICdzb3VyY2UpKSkpCiAKIChkZWZpbmUgKGNoZWNr LWRlcml2YXRpb24gcGFja2FnZSkKICAgIkVtaXQgYSB3YXJuaW5nIGlmIHdlIGZhaWwgdG8gY29t cGlsZSBQQUNLQUdFIHRvIGEgZGVyaXZhdGlvbi4iCkBAIC02NDMsNiArNjY0LDEwIEBAIG9yIGEg bGlzdCB0aGVyZW9mIikKICAgICAgKGRlc2NyaXB0aW9uICJWYWxpZGF0ZSBzb3VyY2UgVVJMcyIp CiAgICAgIChjaGVjayAgICAgICBjaGVjay1zb3VyY2UpKQogICAgKGxpbnQtY2hlY2tlcgorICAg ICAobmFtZSAgICAgICAgJ3NvdXJjZS1maWxlLW5hbWUpCisgICAgIChkZXNjcmlwdGlvbiAiVmFs aWRhdGUgZmlsZSBuYW1lcyBvZiBzb3VyY2VzIikKKyAgICAgKGNoZWNrICAgICAgIGNoZWNrLXNv dXJjZS1maWxlLW5hbWUpKQorICAgKGxpbnQtY2hlY2tlcgogICAgICAobmFtZSAgICAgICAgJ2Rl cml2YXRpb24pCiAgICAgIChkZXNjcmlwdGlvbiAiUmVwb3J0IGZhaWx1cmUgdG8gY29tcGlsZSBh IHBhY2thZ2UgdG8gYSBkZXJpdmF0aW9uIikKICAgICAgKGNoZWNrICAgICAgIGNoZWNrLWRlcml2 YXRpb24pKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGludC5zY20gYi90ZXN0cy9saW50LnNjbQppbmRl eCBhYzQ3ZGJiLi4yZmFjMjg0IDEwMDY0NAotLS0gYS90ZXN0cy9saW50LnNjbQorKysgYi90ZXN0 cy9saW50LnNjbQpAQCAtMSw2ICsxLDYgQEAKIDs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBw YWNrYWdlIG1hbmFnZW1lbnQgZm9yIEdOVQogOzs7IENvcHlyaWdodCDCqSAyMDEyLCAyMDEzIEN5 cmlsIFJvZWxhbmR0IDx0aXBlY2FtbEBnbWFpbC5jb20+Ci07OzsgQ29weXJpZ2h0IMKpIDIwMTQg RXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4KKzs7OyBDb3B5cmlnaHQgwqkgMjAx NCwgMjAxNSBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgogOzs7IENvcHlyaWdo dCDCqSAyMDE0LCAyMDE1IEx1ZG92aWMgQ291cnTDqHMgPGx1ZG9AZ251Lm9yZz4KIDs7OwogOzs7 IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgpAQCAtMjEsNiArMjEsNyBAQAogKGRlZmlu ZS1tb2R1bGUgKHRlc3QtbGludCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHRlc3RzKQogICAjOnVz ZS1tb2R1bGUgKGd1aXggZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnaXQtZG93bmxv YWQpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZC1zeXN0ZW0gZ251KQogICAjOnVzZS1tb2R1 bGUgKGd1aXggcGFja2FnZXMpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBzY3JpcHRzIGxpbnQpCkBA IC0zOTgsNiArMzk5LDgzIEBAIHJlcXVlc3RzLiIKICAgICAgICAgICAoY2hlY2staG9tZS1wYWdl IHBrZykpKSkKICAgICAibm90IHJlYWNoYWJsZTogNDA0IikpKQogCisodGVzdC1hc3NlcnQgInNv dXJjZTogZmlsZSBuYW1lIgorICAoLT5ib29sCisgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgKHdp dGgtd2FybmluZ3MKKyAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UgIngiCisgICAgICAg ICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikKKyAgICAgICAgICAgICAgICAgICAoc291cmNl CisgICAgICAgICAgICAgICAgICAgIChvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAobWV0 aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAodXJpICJodHRwOi8vd3d3LmV4 YW1wbGUuY29tLzMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1NiAl bnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkp CisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKQorCiso dGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIHYiCisgICgtPmJvb2wKKyAgIChzdHJpbmct Y29udGFpbnMKKyAgICAod2l0aC13YXJuaW5ncworICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFj a2FnZSAieCIKKyAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4yLjEiKQorICAgICAgICAg ICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgKG9yaWdpbgorICAgICAgICAg ICAgICAgICAgICAgIChtZXRob2QgdXJsLWZldGNoKQorICAgICAgICAgICAgICAgICAgICAgICh1 cmkgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vdjMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAg ICAgICAgICAgKHNoYTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJj ZS1maWxlLW5hbWUgcGtnKSkpCisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFj a2FnZSBuYW1lIikpKQorCisodGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIGJhZCBjaGVj a291dCIKKyAgKC0+Ym9vbAorICAgKHN0cmluZy1jb250YWlucworICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlICJ4IgorICAgICAgICAgICAgICAgICAg ICh2ZXJzaW9uICIzLjIuMSIpCisgICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAg ICAgICAgICAgICAob3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0 Y2gpCisgICAgICAgICAgICAgICAgICAgICAgKHVyaSAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh1cmwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20veC5naXQiKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXQgIjAiKSkpCisgICAgICAgICAgICAg ICAgICAgICAgKHNoYTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJj ZS1maWxlLW5hbWUgcGtnKSkpCisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFj a2FnZSBuYW1lIikpKQorCisodGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIGdvb2QgY2hl Y2tvdXQiCisgIChub3QKKyAgICgtPmJvb2wKKyAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICh3 aXRoLXdhcm5pbmdzCisgICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZSAieCIKKyAgICAg ICAgICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikKKyAgICAgICAgICAgICAgICAgICAgKHNv dXJjZQorICAgICAgICAgICAgICAgICAgICAgKG9yaWdpbgorICAgICAgICAgICAgICAgICAgICAg ICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHVyaSAoZ2l0LXJl ZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJsICJodHRwOi8vZ2l0LmV4 YW1wbGUuY29tL3guZ2l0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdCAi MCIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoc3RyaW5nLWFwcGVuZCAi eC0iIHZlcnNpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAoc2hhMjU2ICVudWxsLXNoYTI1 NikpKSkpKQorICAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkpCisgICAgICJm aWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2UgbmFtZSIpKSkpCisKKyh0ZXN0LWFz c2VydCAic291cmNlOiBmaWxlIG5hbWUgdmFsaWQiCisgIChub3QKKyAgICgtPmJvb2wKKyAgICAo c3RyaW5nLWNvbnRhaW5zCisgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgKGxldCAoKHBrZyAo ZHVtbXktcGFja2FnZSAieCIKKyAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikK KyAgICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgKG9yaWdp bgorICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHVyaSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS94LTMuMi4xLnRhci5neiIp CisgICAgICAgICAgICAgICAgICAgICAgIChzaGEyNTYgJW51bGwtc2hhMjU2KSkpKSkpCisgICAg ICAgICAoY2hlY2stc291cmNlLWZpbGUtbmFtZSBwa2cpKSkKKyAgICAgImZpbGUgbmFtZSBzaG91 bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKSkKKwogKHRlc3Qtc2tpcCAoaWYgJWh0dHAt c2VydmVyLXNvY2tldCAwIDEpKQogKHRlc3QtZXF1YWwgInNvdXJjZTogMjAwIgogICAiIgotLSAK Mi40LjMKCg== --MP_/Hj9o6KucSRshc5bpxTRrk4L--