From 3ce462c8fda02c29e79ec80fb389fc44d550142a Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sun, 23 Apr 2023 11:43:07 -0700 Subject: [PATCH] When examining merge commits in our Git hooks, only check the first parent This does two things: 1. We can properly validate log entries in merge commits. 2. We don't check commits that were merged in from other branches. * build-aux/git-hooks/commit-msg-files.awk (get_commit_changes): Get the changes compared to the first parent. * build-aux/git-hooks/pre-push: Only get the first parent of merge commits when returning the rev-list, and only check "master" or "emacs-NN" branches. --- build-aux/git-hooks/commit-msg-files.awk | 2 +- build-aux/git-hooks/pre-push | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/build-aux/git-hooks/commit-msg-files.awk b/build-aux/git-hooks/commit-msg-files.awk index 2117681343f..5c9b70a5de5 100644 --- a/build-aux/git-hooks/commit-msg-files.awk +++ b/build-aux/git-hooks/commit-msg-files.awk @@ -33,7 +33,7 @@ function get_commit_changes(commit_sha, changes, cmd, i, j, len, \ bits, filename) { # Collect all the files touched in the specified commit. - cmd = ("git log -1 --name-status --format= " commit_sha) + cmd = ("git show --name-status --first-parent --format= " commit_sha) while ((cmd | getline) > 0) { for (i = 2; i <= NF; i++) { len = split($i, bits, "/") diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push index 65c96bfdec9..03fbede4865 100755 --- a/build-aux/git-hooks/pre-push +++ b/build-aux/git-hooks/pre-push @@ -39,14 +39,17 @@ else fi # Standard input receives lines of the form: -# SP SP SP LF +# SP SP SP LF $awk -v origin_name="$1" ' # If the local SHA is all zeroes, ignore it. $2 ~ /^0{40}$/ { next } - $2 ~ /^[a-z0-9]{40}$/ { + # Check any lines with a valid local SHA and whose remote ref is + # master or an emacs-NN release branch. (We want to avoid checking + # feature or scratch branches here.) + $2 ~ /^[a-z0-9]{40}$/ && $3 ~ /^refs/heads/(master|emacs-[0-9]+)$/ { newref = $2 # If the remote SHA is all zeroes, this is a new object to be # pushed (likely a branch)... @@ -78,6 +81,6 @@ $awk -v origin_name="$1" ' } # Print every SHA after oldref, up to (and including) newref. - system("git rev-list --reverse " oldref ".." newref) + system("git rev-list --first-parent --reverse " oldref ".." newref) } ' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk -- 2.39.2