From: Jim Porter <jporterbugs@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: john@yates-sheets.org, emacs-devel@gnu.org
Subject: Re: New Git hooks for checking file names in commit messages
Date: Sat, 22 Apr 2023 12:44:12 -0700 [thread overview]
Message-ID: <7e41e8dc-2341-8435-7678-4e566d21c6b7@gmail.com> (raw)
In-Reply-To: <838rek2w3g.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 967 bytes --]
On 4/22/2023 12:51 AM, Eli Zaretskii wrote:
> The programmatic expression of the standards is in add-log.el, I
> think.
Thanks, that was helpful. From that, I see that you can list multiple
files separated by commas and a space like so:
* file1.txt, file2.txt
add-log.el's font-lock doesn't allow lists of files like that to span
multiple lines, but I think it's reasonable to support that in the
hooks. Everything else about the entries can span multiple lines, after all.
With add-log.el as a reference, I tightened up the Git hooks a bit so
that they're stricter. They're still reasonably flexible though, e.g. it
won't treat something like this as a file entry:
* This is a bullet point.
That will help reduce false positives so that committers can format the
description of their commit fairly freely. Hopefully this is a good
balance: the hooks are stricter than authors.el, but not so strict that
reasonable (IMO) messages will be rejected.
[-- Attachment #2: 0001-Improve-the-logic-of-the-file-entry-Git-hooks-to-mat.patch --]
[-- Type: text/plain, Size: 2617 bytes --]
From f86ddf1ced484f673eada070f35da7d052e43b99 Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Fri, 21 Apr 2023 10:06:49 -0700
Subject: [PATCH] Improve the logic of the file entry Git hooks to match
admin/authors.el
* build-aux/git-hooks/commit-msg-files.awk (check_commit_msg_files):
Accumulate file entries over multiple lines.
---
build-aux/git-hooks/commit-msg-files.awk | 31 ++++++++++++++++++------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/build-aux/git-hooks/commit-msg-files.awk b/build-aux/git-hooks/commit-msg-files.awk
index 3856e474d3e..edffb7d339c 100644
--- a/build-aux/git-hooks/commit-msg-files.awk
+++ b/build-aux/git-hooks/commit-msg-files.awk
@@ -59,15 +59,28 @@ function check_commit_msg_files(commit_sha, verbose, changes, good, \
if (verbose && ! msg)
msg = $0
- # Find lines that reference files. We look at any line starting
- # with "*" (possibly prefixed by "; ") where the file part starts
- # with an alphanumeric character. The file part ends if we
- # encounter any of the following characters: [ ( < { :
- if (/^(; )?\*[ \t]+[[:alnum:]]/ && match($0, /[[:alnum:]][^[(<{:]*/)) {
- # There might be multiple files listed on this line, separated
+ # Find file entries in the commit message. We look at any line
+ # starting with "*" (possibly prefixed by "; ") followed by a ":",
+ # possibly on a different line. If we encounter a blank line
+ # without seeing a ":", then we don't treat that as a file entry.
+
+ # Accumulate the contents of a (possible) file entry.
+ if (/^[ \t]*$/)
+ filenames_str = ""
+ else if (/^(; )?\*[ \t]+[[:alnum:]]/)
+ filenames_str = $0
+ else if (filenames_str)
+ filenames_str = (filenames_str $0)
+
+ # We have a file entry; analyze it.
+ if (filenames_str && /:/) {
+ # Delete the leading "*" and any trailing information.
+ sub(/^(; )?\*[ \t]+/, "", filenames_str)
+ sub(/[[(<:].*$/, "", filenames_str)
+
+ # There might be multiple files listed in this entry, separated
# by spaces (and possibly a comma). Iterate over each of them.
- split(substr($0, RSTART, RLENGTH), filenames, ",?([[:blank:]]+|$)")
-
+ split(filenames_str, filenames, ",[ \t]+")
for (i in filenames) {
# Remove trailing slashes from any directory entries.
sub(/\/$/, "", filenames[i])
@@ -83,6 +96,8 @@ function check_commit_msg_files(commit_sha, verbose, changes, good, \
good = 0
}
}
+
+ filenames_str = ""
}
}
close(cmd)
--
2.25.1
next prev parent reply other threads:[~2023-04-22 19:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-21 4:55 New Git hooks for checking file names in commit messages Jim Porter
2023-04-21 12:05 ` John Yates
2023-04-21 16:44 ` Jim Porter
2023-04-21 17:44 ` Jim Porter
2023-04-22 6:11 ` Eli Zaretskii
2023-04-22 6:59 ` Jim Porter
2023-04-22 7:51 ` Eli Zaretskii
2023-04-22 19:44 ` Jim Porter [this message]
2023-04-22 23:21 ` John Yates
2023-04-21 13:57 ` Alan Mackenzie
2023-04-21 15:05 ` Eli Zaretskii
2023-04-21 15:38 ` Arsen Arsenović
2023-04-21 15:50 ` Eli Zaretskii
2023-04-21 16:20 ` Arsen Arsenović
2023-04-21 17:44 ` Eli Zaretskii
2023-04-21 17:50 ` Arsen Arsenović
2023-04-22 6:16 ` Eli Zaretskii
2023-04-21 18:25 ` Andreas Schwab
2023-04-21 19:03 ` Björn Bidar
2023-04-21 19:53 ` Jim Porter
2023-04-22 7:03 ` Eli Zaretskii
2023-04-22 19:52 ` Jim Porter
2023-04-23 6:11 ` Eli Zaretskii
2023-04-23 7:07 ` Jim Porter
2023-04-23 7:37 ` Eli Zaretskii
2023-04-23 19:15 ` Jim Porter
2023-04-23 19:24 ` Eli Zaretskii
2023-04-23 7:19 ` Jim Porter
2023-04-23 7:39 ` Eli Zaretskii
2023-04-23 9:51 ` Björn Bidar
2023-04-22 23:55 ` Dmitry Gutov
2023-04-23 5:36 ` Eli Zaretskii
2023-04-23 9:47 ` Björn Bidar
2023-04-21 16:39 ` Jim Porter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7e41e8dc-2341-8435-7678-4e566d21c6b7@gmail.com \
--to=jporterbugs@gmail.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=john@yates-sheets.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.