emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 3ce462c8fda 3/3: When examining merge commits in our Git hooks, o


From: Jim Porter
Subject: master 3ce462c8fda 3/3: When examining merge commits in our Git hooks, only check the first parent
Date: Sun, 23 Apr 2023 15:07:52 -0400 (EDT)

branch: master
commit 3ce462c8fda02c29e79ec80fb389fc44d550142a
Author: Jim Porter <jporterbugs@gmail.com>
Commit: Jim Porter <jporterbugs@gmail.com>

    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:
-#   <local ref> SP <local name> SP <remote ref> SP <remote name> LF
+#   <local ref> SP <local sha> SP <remote ref> SP <remote sha> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]