diff options
Diffstat (limited to 'build-aux/git-hooks/pre-push')
-rwxr-xr-x | build-aux/git-hooks/pre-push | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push index adcf27d4a5d..8e8277cba4f 100755 --- a/build-aux/git-hooks/pre-push +++ b/build-aux/git-hooks/pre-push @@ -39,29 +39,32 @@ 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). Go backwards until we find a SHA on - # an origin branch. + # pushed (likely a branch)... if ($4 ~ /^0{40}$/) { back = 0 - cmd = ("git branch -r -l '\''" origin_name "/*'\'' --contains " \ - newref "~" back) - while ((cmd | getline) == 0) { - - # Only look back at most 1000 commits, just in case... - if (back++ > 1000) + # ... Go backwards until we find a SHA on an origin branch. + # Stop trying after 1000 commits, just in case... + for (back = 0; back < 1000; back++) { + cmd = ("git branch -r -l '\''" origin_name "/*'\''" \ + " --contains " newref "~" back) + rv = (cmd | getline) + close(cmd) + if (rv > 0) break; } - close(cmd) cmd = ("git rev-parse " newref "~" back) cmd | getline oldref @@ -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 |