From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jim Porter Newsgroups: gmane.emacs.devel Subject: Re: Mistakes in commit log messages Date: Sat, 15 Apr 2023 13:54:05 -0700 Message-ID: References: <835ya5m4p0.fsf@gnu.org> <83v8i4arzt.fsf@gnu.org> <838rezardu.fsf@gnu.org> <319d616d-9230-0a82-331f-0f57488e4c80@gmail.com> <834jpm9s1g.fsf@gnu.org> <83v8i28b3j.fsf@gnu.org> <693285d2-e50b-289d-4f3e-ddd817ddc75b@gmail.com> <48d4dffa-cfa8-7949-3043-a1efa937902d@gmail.com> <838rew5lak.fsf@gnu.org> <5adfbf6f-fbcb-f4e8-3662-48bd5eb6a269@gmail.com> <9c8826af-a160-d36f-7577-2bc5ec0c2004@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------s0OQW24GRIjz6DZEi99aZU7Y" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23652"; mail-complaints-to="usenet@ciao.gmane.io" Cc: acm@muc.de, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Apr 15 22:55:03 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pnmvG-0005vn-Eq for ged-emacs-devel@m.gmane-mx.org; Sat, 15 Apr 2023 22:55:02 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pnmuU-0003uG-IR; Sat, 15 Apr 2023 16:54:14 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pnmuS-0003u5-4w for emacs-devel@gnu.org; Sat, 15 Apr 2023 16:54:12 -0400 Original-Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pnmuP-0000xO-Nv; Sat, 15 Apr 2023 16:54:11 -0400 Original-Received: by mail-pj1-x1033.google.com with SMTP id w11so22350128pjh.5; Sat, 15 Apr 2023 13:54:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681592047; x=1684184047; h=in-reply-to:references:cc:to:from:content-language:subject :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=9+brmK7FHP4TmoKo9ebLVQjpMLCN2XNC2b39BMbuGNc=; b=gvMhNlUtTD7LA1Qy+9yXRkmvSyA1AiftA8DJ7l8CIqky31cYa8cZ3HWld1bWXSJTV3 nqXWDZJTEJGmNAKoCpN/m03BhgSWJ7rxlBxjLzVvg+pRLrMxmspXGTg59dL7ZqCO5S+/ GBJqesDZZGyhxQtyIcLxyMpmFeb1QHxyzhPFiVItwPnr1fr12eBpbM2N+yUMqvEF+1Gg sGTgc381awzqAiW/SgV3qqOhX0O1EhIMJRoLJGFVvqG4gOcbtqWKrewDf7CfWY6gcGrS /ak0VlY3QE4z3SmtqToXVaHNDOl0DhQtd6ctYgiL5k6Cz5sXw9dShhAG7uY69sjYdvlM 6IEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681592047; x=1684184047; h=in-reply-to:references:cc:to:from:content-language:subject :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=9+brmK7FHP4TmoKo9ebLVQjpMLCN2XNC2b39BMbuGNc=; b=HGzQnVAkN7oY62sRvTPxYTdaBncLcJtKvCHCXpkFYLhziCtpMxHuaGhqzLYLz2aDaz Bwo65K0kABPvREeP7DKIyKvxQDXs851U6Q5IG1/urXqi+HPKy8yO1jvrLWq1KN9Y+VTT no6MhJNOM2AoyIbl8SMMullBBWac/mcw/I0q6+1w3NunQ33ZI8XFqOye4P0/ds+CP6A2 ToxBR07rIKk/7tD7sFNqaYZvltKyZlpElttkmG52O+Zwd715v4U8+2RHoev95y7SRWM7 3AxtTz/oB85m9lNAsY9mozSZCAWRd91qOCxqYkNdGEXrM543OvAf+LrxHGbnno06MNRD a65Q== X-Gm-Message-State: AAQBX9cxf7VjPA+t7tr6gAcdNutQ9hj8kcZJJqftSlsudVrRSGWrsZ0j 15XPY6jjGoE4awfzhyyyAQjjUFM400xn9w== X-Google-Smtp-Source: AKy350alWoIti8xcyTq41sQzMy1lFTpUjNwT5GjQcEkqG8wk497YLQ7mMZy6ePPJAdRrB5ZIK7p0DQ== X-Received: by 2002:a17:903:1106:b0:1a2:70ed:6cd9 with SMTP id n6-20020a170903110600b001a270ed6cd9mr8874686plh.22.1681592047404; Sat, 15 Apr 2023 13:54:07 -0700 (PDT) Original-Received: from [192.168.1.2] (cpe-76-168-148-233.socal.res.rr.com. [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id e12-20020a170902d38c00b001a1d4a985eesm5013566pld.228.2023.04.15.13.54.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 15 Apr 2023 13:54:06 -0700 (PDT) Content-Language: en-US In-Reply-To: <9c8826af-a160-d36f-7577-2bc5ec0c2004@gmail.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=jporterbugs@gmail.com; helo=mail-pj1-x1033.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:305331 Archived-At: This is a multi-part message in MIME format. --------------s0OQW24GRIjz6DZEi99aZU7Y Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 4/14/2023 10:45 PM, Jim Porter wrote: > Here are a couple small fixes after testing against the 2000 latest > commits (though I haven't examined *all* the errors in detail). Ok, I've now gone over the 5000 latest commits in some closer detail. Here are the main classes of error I see: 1. Commit message lines starting with "*" that aren't file entries. 2. Commit messages from Eglot's import (these aren't *really* a problem, and I think authors.el is smart enough to handle them; if something like this happened in future, we could just use "git push --no-verify" to ignore this hook). 3. Obviously-wrong typos of file names (including files listed in the commit message that exist, but aren't in the diff). I think erroring out on all three of these cases makes sense. Number 2 isn't truly an error, but it would be hard to detect that reliably in the hook (at least not without adding a list of exceptions), and it's rare enough that we can just use "--no-verify" as needed (or fix up the commit messages during the import). There are a few cases that are more interesting though: A. Wildcards in filenames ------------------------- 626f2f7441, 623db40dd1, 4b5414abbc, c32212bf96, f4bfe7834a, 23c1ee6989, 7e185bc9ba, 36474a1e49, 5fb8b20fa3, c45bfd3c4a, fcc7373b28, 8e9835c673, 952550258d, d1a7d16f8e, dc083ebc4e, 5f74397490, 0f85f2c0e5, 49bad2a0a6, 5a77517e7d, 24b9515da0, ae3904bb5d, 228d9d615d, 8461cfc8fc, e402887d5d, ab7dddea90, 9e4f11a163, 6342264ef7 These cases use wildcards in the file names. I think we should avoid doing this, for the same reason the GNU ChangeLog standards say to avoid doing it for function names: "If you mention the names of the modified functions or variables, it’s important to name them in full. ... Subsequent maintainers will often search for a function name to find all the change log entries that pertain to it; if you abbreviate the name, they won’t find it when they search."[1] Therefore, I didn't do anything about these in the latest revision of the hook: they're still errors. For committers that don't want to list every file explicitly, they could just add an entry for the directory, *without* any wildcards. B. File entry for a directory, using a trailing "/" --------------------------------------------------- 9b80fe55f9, 28d0654943, d9c94e93b7, 7d0dc31833, 16975078b4, 07235678a4, c55f4055dd, 9451ea0a05, f342b7c969 I think this is perfectly ok, so I've fixed the hook to allow this (see attached). C. Line-wrapped file entries ---------------------------- 8675f4136c, 0e25a39e69, 7c79eea51d, 335a5fd173, 31f8ae53be These are cases where file entries extend multiple lines. In the first example, a single file is split onto two lines, which I don't think is feasible to identify. In the other cases, the entries are formatted like so: * path/to/file.txt, path/to/other/file.txt: Change something. I've partially fixed this so that it can properly parse the first line, but handling the second line is tricky, so I didn't bother. It would be better if committers used this format anyway: * path/to/file.txt: * path/to/other/file.txt: Change something. D. Merge commit with file entries (and no diff) ----------------------------------------------- 289b457cac This is an odd case: it's a merge commit that mentions a bunch of file changes, but there's no diff in this commit. I'm not really sure what to do about this one, but maybe we shouldn't add file entries for cases like this under normal circumstances. If there's an exception to that rule, we can always push a commit like this with "--no-verify". [1] https://www.gnu.org/prep/standards/html_node/Style-of-Change-Logs.html#Style-of-Change-Logs --------------s0OQW24GRIjz6DZEi99aZU7Y Content-Type: text/plain; charset=UTF-8; name="0001-Add-Git-hooks-to-check-filenames-listed-in-the-commi.patch" Content-Disposition: attachment; filename*0="0001-Add-Git-hooks-to-check-filenames-listed-in-the-commi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkYjIzMjQxZDVlZGQ2MWFjY2ExNDg5OWM4MDRlYjM5ZTEzMzg1ODc5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFdlZCwgMTIgQXByIDIwMjMgMjM6MDM6MzEgLTA3MDAKU3ViamVjdDogW1BB VENIXSBBZGQgR2l0IGhvb2tzIHRvIGNoZWNrIGZpbGVuYW1lcyBsaXN0ZWQgaW4gdGhlIGNv bW1pdCBtZXNzYWdlCgoqIGJ1aWxkLWF1eC9naXQtaG9va3MvY29tbWl0LW1zZy1maWxlcy5h d2s6CiogYnVpbGQtYXV4L2dpdC1ob29rcy9wb3N0LWNvbW1pdDoKKiBidWlsZC1hdXgvZ2l0 LWhvb2tzL3ByZS1wdXNoOiBOZXcgZmlsZXMuLi4KKiBhdXRvZ2VuLnNoOiAuLi4gYWRkIHRo ZW0uCi0tLQogYXV0b2dlbi5zaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MyArLQogYnVpbGQtYXV4L2dpdC1ob29rcy9jb21taXQtbXNnLWZpbGVzLmF3ayB8IDExMyAr KysrKysrKysrKysrKysrKysrKysrKwogYnVpbGQtYXV4L2dpdC1ob29rcy9wb3N0LWNvbW1p dCAgICAgICAgICB8ICAyOSArKysrKysKIGJ1aWxkLWF1eC9naXQtaG9va3MvcHJlLXB1c2gg ICAgICAgICAgICAgfCAgNzAgKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMjE0 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBidWls ZC1hdXgvZ2l0LWhvb2tzL2NvbW1pdC1tc2ctZmlsZXMuYXdrCiBjcmVhdGUgbW9kZSAxMDA3 NTUgYnVpbGQtYXV4L2dpdC1ob29rcy9wb3N0LWNvbW1pdAogY3JlYXRlIG1vZGUgMTAwNzU1 IGJ1aWxkLWF1eC9naXQtaG9va3MvcHJlLXB1c2gKCmRpZmYgLS1naXQgYS9hdXRvZ2VuLnNo IGIvYXV0b2dlbi5zaAppbmRleCBhZjRjMmFkMTRkZi4uNjEyN2U3YjI0ZjQgMTAwNzU1Ci0t LSBhL2F1dG9nZW4uc2gKKysrIGIvYXV0b2dlbi5zaApAQCAtMzQwLDcgKzM0MCw4IEBAIGhv b2tzPQogdGFpbG9yZWRfaG9va3M9CiBzYW1wbGVfaG9va3M9CiAKLWZvciBob29rIGluIGNv bW1pdC1tc2cgcHJlLWNvbW1pdCBwcmVwYXJlLWNvbW1pdC1tc2c7IGRvCitmb3IgaG9vayBp biBjb21taXQtbXNnIHByZS1jb21taXQgcHJlcGFyZS1jb21taXQtbXNnIHBvc3QtY29tbWl0 IFwKKyAgICAgICAgICAgIHByZS1wdXNoIGNvbW1pdC1tc2ctZmlsZXMuYXdrOyBkbwogICAg IGNtcCAtLSBidWlsZC1hdXgvZ2l0LWhvb2tzLyRob29rICIkaG9va3MvJGhvb2siID4vZGV2 L251bGwgMj4mMSB8fAogCXRhaWxvcmVkX2hvb2tzPSIkdGFpbG9yZWRfaG9va3MgJGhvb2si CiBkb25lCmRpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0LWhvb2tzL2NvbW1pdC1tc2ctZmls ZXMuYXdrIGIvYnVpbGQtYXV4L2dpdC1ob29rcy9jb21taXQtbXNnLWZpbGVzLmF3awpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU2NjkwNTY1N2QKLS0tIC9k ZXYvbnVsbAorKysgYi9idWlsZC1hdXgvZ2l0LWhvb2tzL2NvbW1pdC1tc2ctZmlsZXMuYXdr CkBAIC0wLDAgKzEsMTEzIEBACisjIENoZWNrIHRoZSBmaWxlIGxpc3Qgb2YgR05VIEVtYWNz IGNoYW5nZSBsb2cgZW50cmllcyBmb3IgZWFjaCBjb21taXQgU0hBLgorCisjIENvcHlyaWdo dCAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworIyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisjIEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIyMgQ29tbWVudGFyeToKKworIyBUaGlzIHNjcmlwdCBhY2NlcHRz IGEgbGlzdCBvZiAodW5hYmJyZXZpYXRlZCkgR2l0IGNvbW1pdCBTSEFzLCBhbmQKKyMgd2ls bCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGVtIHRvIGNoZWNrIHRoYXQgYW55IGZpbGVzIG1lbnRp b25lZCBpbiB0aGUKKyMgY29tbWl0IG1lc3NhZ2UgYXJlIGFjdHVhbGx5IHByZXNlbnQgaW4g dGhlIGNvbW1pdCdzIGRpZmYuICBJZiBub3QsCisjIGl0IHdpbGwgcHJpbnQgb3V0IHRoZSBp bmNvcnJlY3QgZmlsZSBuYW1lcyBhbmQgcmV0dXJuIDEuCisKKyMgWW91IGNhbiBhbHNvIHBh c3MgIi12IHJlYXNvbj1wcmUtcHVzaCIsIHdoaWNoIHdpbGwgYWRkIG1vcmUtdmVyYm9zZQor IyBvdXRwdXQsIGluZGljYXRlIHRoZSBhYmJyZXZpYXRlZCBjb21taXQgU0hBIGFuZCBmaXJz dCBsaW5lIG9mIHRoZQorIyBjb21taXQgbWVzc2FnZSBmb3IgYW55IGltcHJvcGVyIGNvbW1p dHMuCisKKyMjIyBDb2RlOgorCitmdW5jdGlvbiBnZXRfY29tbWl0X2NoYW5nZXMoY29tbWl0 X3NoYSwgY2hhbmdlcywgICAgY21kLCBpLCBqLCBsZW4sIFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiaXRzLCBmaWxlbmFtZSkgeworICAjIENvbGxlY3QgYWxsIHRoZSBmaWxl cyB0b3VjaGVkIGluIHRoZSBzcGVjaWZpZWQgY29tbWl0LgorICBjbWQgPSAoImdpdCBsb2cg LTEgLS1uYW1lLXN0YXR1cyAtLWZvcm1hdD0gIiBjb21taXRfc2hhKQorICB3aGlsZSAoKGNt ZCB8IGdldGxpbmUpID4gMCkgeworICAgIGZvciAoaSA9IDI7IGkgPD0gTkY7IGkrKykgewor ICAgICAgbGVuID0gc3BsaXQoJGksIGJpdHMsICIvIikKKyAgICAgIGZvciAoaiA9IDE7IGog PD0gbGVuOyBqKyspIHsKKyAgICAgICAgaWYgKGogPT0gMSkKKyAgICAgICAgICBmaWxlbmFt ZSA9IGJpdHNbal0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5h bWUgIi8iIGJpdHNbal0KKyAgICAgICAgY2hhbmdlc1tmaWxlbmFtZV0gPSAxCisgICAgICB9 CisgICAgfQorICB9CisgIGNsb3NlKGNtZCkKK30KKworZnVuY3Rpb24gY2hlY2tfY29tbWl0 X21zZ19maWxlcyhjb21taXRfc2hhLCB2ZXJib3NlLCAgICBjaGFuZ2VzLCBnb29kLCBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgbXNnLCBmaWxlbmFtZXNfc3Ry LCBmaWxlbmFtZXMsIGkpIHsKKyAgZ2V0X2NvbW1pdF9jaGFuZ2VzKGNvbW1pdF9zaGEsIGNo YW5nZXMpCisgIGdvb2QgPSAxCisKKyAgY21kID0gKCJnaXQgbG9nIC0xIC0tZm9ybWF0PSVC ICIgY29tbWl0X3NoYSkKKyAgd2hpbGUgKChjbWQgfCBnZXRsaW5lKSA+IDApIHsKKyAgICBp ZiAodmVyYm9zZSAmJiAhIG1zZykKKyAgICAgIG1zZyA9ICQwCisKKyAgICAjIEZpbmQgbGlu ZXMgdGhhdCByZWZlcmVuY2UgZmlsZXMuICBXZSBsb29rIGF0IGFueSBsaW5lIHN0YXJ0aW5n CisgICAgIyB3aXRoICIqIiAocG9zc2libHkgcHJlZml4ZWQgYnkgIjsgIikgd2hlcmUgdGhl IGZpbGUgcGFydCBzdGFydHMKKyAgICAjIHdpdGggYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rl ci4gIFRoZSBmaWxlIHBhcnQgZW5kcyBpZiB3ZQorICAgICMgZW5jb3VudGVyIGFueSBvZiB0 aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IFsgKCA8IHsgOgorICAgIGlmICgvXig7ICk/XCpb IFx0XStbWzphbG51bTpdXS8gJiYgbWF0Y2goJDAsIC9bWzphbG51bTpdXVteWyg8ezpdKi8p KSB7CisgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIGZpbGVzIGxpc3RlZCBvbiB0 aGlzIGxpbmUsIHNlcGFyYXRlZAorICAgICAgIyBieSBzcGFjZXMgKGFuZCBwb3NzaWJseSBh IGNvbW1hKS4gIEl0ZXJhdGUgb3ZlciBlYWNoIG9mIHRoZW0uCisgICAgICBzcGxpdChzdWJz dHIoJDAsIFJTVEFSVCwgUkxFTkdUSCksIGZpbGVuYW1lcywgIiw/KFtbOmJsYW5rOl1dK3wk KSIpCisKKyAgICAgIGZvciAoaSBpbiBmaWxlbmFtZXMpIHsKKyAgICAgICAgIyBSZW1vdmUg dHJhaWxpbmcgc2xhc2hlcyBmcm9tIGFueSBkaXJlY3RvcnkgZW50cmllcy4KKyAgICAgICAg c3ViKC9cLyQvLCAiIiwgZmlsZW5hbWVzW2ldKQorCisgICAgICAgIGlmIChsZW5ndGgoZmls ZW5hbWVzW2ldKSAmJiAhIChmaWxlbmFtZXNbaV0gaW4gY2hhbmdlcykpIHsKKyAgICAgICAg ICBpZiAoZ29vZCkgeworICAgICAgICAgICAgIyBQcmludCBhIGhlYWRlciBkZXNjcmliaW5n IHRoZSBlcnJvci4KKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICBw cmludGYoIkluIGNvbW1pdCAlcyBcIiVzXCIuLi5cbiIsIHN1YnN0cihjb21taXRfc2hhLCAx LCAxMCksIG1zZykKKyAgICAgICAgICAgIHByaW50ZigiRmlsZXMgbGlzdGVkIGluIGNvbW1p dCBtZXNzYWdlLCBidXQgbm90IGluIGRpZmY6XG4iKQorICAgICAgICAgIH0KKyAgICAgICAg ICBwcmludGYoIiAgJXNcbiIsIGZpbGVuYW1lc1tpXSkKKyAgICAgICAgICBnb29kID0gMAor ICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGNsb3NlKGNtZCkKKworICByZXR1 cm4gZ29vZAorfQorCitCRUdJTiB7CisgIGlmIChyZWFzb24gPT0gInByZS1wdXNoIikKKyAg ICB2ZXJib3NlID0gMQorfQorCisvXlthLXowLTldezQwfSQvIHsKKyAgaWYgKCEgY2hlY2tf Y29tbWl0X21zZ19maWxlcygkMCwgdmVyYm9zZSkpIHsKKyAgICBzdGF0dXMgPSAxCisgIH0K K30KKworRU5EIHsKKyAgaWYgKHN0YXR1cyAhPSAwKSB7CisgICAgaWYgKHJlYXNvbiA9PSAi cHJlLXB1c2giKQorICAgICAgZXJyb3JfbXNnID0gIlB1c2ggYWJvcnRlZCIKKyAgICBlbHNl CisgICAgICBlcnJvcl9tc2cgPSAiQmFkIGNvbW1pdCBtZXNzYWdlIgorICAgIHByaW50Zigi JXM7IHBsZWFzZSBzZWUgdGhlIGZpbGUgJ0NPTlRSSUJVVEUnXG4iLCBlcnJvcl9tc2cpCisg IH0KKyAgZXhpdCBzdGF0dXMKK30KZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9naXQtaG9va3Mv cG9zdC1jb21taXQgYi9idWlsZC1hdXgvZ2l0LWhvb2tzL3Bvc3QtY29tbWl0Cm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi40YzMwZWM3NmUwMgotLS0gL2Rldi9u dWxsCisrKyBiL2J1aWxkLWF1eC9naXQtaG9va3MvcG9zdC1jb21taXQKQEAgLTAsMCArMSwy OSBAQAorIyEvYmluL3NoCisjIENoZWNrIHRoZSBmaWxlIGxpc3Qgb2YgR05VIEVtYWNzIGNo YW5nZSBsb2cgZW50cmllcyBhZnRlciBjb21taXR0aW5nLgorCisjIENvcHlyaWdodCAyMDIz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdOVSBFbWFjcy4KKworIyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisj IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0 aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCisjIFByZWZlciBnYXdrIGlmIGF2YWlsYWJsZSwgYXMgaXQgaGFuZGxlcyBOVUwg Ynl0ZXMgcHJvcGVybHkuCitpZiB0eXBlIGdhd2sgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisg IGF3az0iZ2F3ayIKK2Vsc2UKKyAgYXdrPSJhd2siCitmaQorCitnaXQgcmV2LXBhcnNlIEhF QUQgfCAkYXdrIC12IHJlYXNvbj1wb3N0LWNvbW1pdCBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgIC1mIC5naXQvaG9va3MvY29tbWl0LW1zZy1maWxlcy5hd2sKZGlmZiAtLWdpdCBh L2J1aWxkLWF1eC9naXQtaG9va3MvcHJlLXB1c2ggYi9idWlsZC1hdXgvZ2l0LWhvb2tzL3By ZS1wdXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi5iMDE4NWE5 N2IyOAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkLWF1eC9naXQtaG9va3MvcHJlLXB1c2gK QEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisjIENoZWNrIHRoZSBmaWxlIGxpc3Qgb2Yg R05VIEVtYWNzIGNoYW5nZSBsb2cgZW50cmllcyBiZWZvcmUgcHVzaGluZy4KKworIyBDb3B5 cmlnaHQgMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZp bGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKyMgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworIyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIyBQcmVmZXIgZ2F3ayBpZiBhdmFpbGFibGUsIGFzIGl0IGhh bmRsZXMgTlVMIGJ5dGVzIHByb3Blcmx5LgoraWYgdHlwZSBnYXdrID4vZGV2L251bGwgMj4m MTsgdGhlbgorICBhd2s9Imdhd2siCitlbHNlCisgIGF3az0iYXdrIgorZmkKKworIyBTdGFu ZGFyZCBpbnB1dCByZWNlaXZlcyBsaW5lcyBvZiB0aGUgZm9ybToKKyMgICA8bG9jYWwgcmVm PiBTUCA8bG9jYWwgbmFtZT4gU1AgPHJlbW90ZSByZWY+IFNQIDxyZW1vdGUgbmFtZT4gTEYK KyRhd2sgLXYgb3JpZ2luX25hbWU9IiQxIiAnCisgICMgSWYgdGhlIGxvY2FsIFNIQSBpcyBh bGwgemVyb2VzLCBpZ25vcmUgaXQuCisgICQyIH4gL14wezQwfSQvIHsKKyAgICBuZXh0Cisg IH0KKworICAkMiB+IC9eW2EtejAtOV17NDB9JC8geworICAgIG5ld3JlZiA9ICQyCisgICAg IyBJZiB0aGUgcmVtb3RlIFNIQSBpcyBhbGwgemVyb2VzLCB0aGlzIGlzIGEgbmV3IG9iamVj dCB0byBiZQorICAgICMgcHVzaGVkIChsaWtlbHkgYSBicmFuY2gpLiAgR28gYmFja3dhcmRz IHVudGlsIHdlIGZpbmQgYSBTSEEgb24KKyAgICAjIGFuIG9yaWdpbiBicmFuY2guCisgICAg aWYgKCQ0IH4gL14wezQwfSQvKSB7CisgICAgICBiYWNrID0gMAorICAgICAgY21kID0gKCJn aXQgYnJhbmNoIC1yIC1sICdcJyciIG9yaWdpbl9uYW1lICIvKidcJycgLS1jb250YWlucyAi IFwKKyAgICAgICAgICAgICBuZXdyZWYgIn4iIGJhY2spCisgICAgICB3aGlsZSAoKGNtZCB8 IGdldGxpbmUpID09IDApIHsKKworICAgICAgICAjIE9ubHkgbG9vayBiYWNrIGF0IG1vc3Qg MTAwMCBjb21taXRzLCBqdXN0IGluIGNhc2UuLi4KKyAgICAgICAgaWYgKGJhY2srKyA+IDEw MDApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjbG9zZShjbWQpCisKKyAg ICAgIGNtZCA9ICgiZ2l0IHJldi1wYXJzZSAiIG5ld3JlZiAifiIgYmFjaykKKyAgICAgIGNt ZCB8IGdldGxpbmUgb2xkcmVmCisgICAgICBpZiAoIShvbGRyZWYgfiAvXlthLXowLTldezQw fSQvKSkgeworICAgICAgICAjIFRoZSBTSEEgaXMgbWlzZm9ybWF0dGVkISAgU2tpcCB0aGlz IGxpbmUuCisgICAgICAgIG5leHQKKyAgICAgIH0KKyAgICAgIGNsb3NlKGNtZCkKKyAgICB9 IGVsc2UgaWYgKCQ0IH4gL15bYS16MC05XXs0MH0kLykgIHsKKyAgICAgIG9sZHJlZiA9ICQ0 CisgICAgfSBlbHNlIHsKKyAgICAgICMgVGhlIFNIQSBpcyBtaXNmb3JtYXR0ZWQhICBTa2lw IHRoaXMgbGluZS4KKyAgICAgIG5leHQKKyAgICB9CisKKyAgICAjIFByaW50IGV2ZXJ5IFNI QSBhZnRlciBvbGRyZWYsIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBuZXdyZWYuCisgICAgc3lz dGVtKCJnaXQgcmV2LWxpc3QgLS1yZXZlcnNlICIgb2xkcmVmICIuLiIgbmV3cmVmKQorICB9 CisnIHwgJGF3ayAtdiByZWFzb249cHJlLXB1c2ggLWYgLmdpdC9ob29rcy9jb21taXQtbXNn LWZpbGVzLmF3awotLSAKMi4yNS4xCgo= --------------s0OQW24GRIjz6DZEi99aZU7Y--