-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
misc: Add gerrit commit message hook to pre-commit
This pre-commit hook adds the Change-ID etc. to the commit message. Change-Id: I43b239468ab60ce1a8aaabb53dd6905819a2ce05 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/62575 Maintainer: Jason Lowe-Power <[email protected]> Reviewed-by: Andreas Sandberg <[email protected]> Tested-by: kokoro <[email protected]>
- Loading branch information
1 parent
6bb7b09
commit c0df86f
Showing
2 changed files
with
110 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
#!/bin/sh | ||
# From Gerrit Code Review 3.6.1-1565-g2ee3d30913 | ||
# | ||
# Part of Gerrit Code Review (https://www.gerritcodereview.com/) | ||
# | ||
# Copyright (C) 2009 The Android Open Source Project | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
set -u | ||
|
||
# avoid [[ which is not POSIX sh. | ||
if test "$#" != 1 ; then | ||
echo "$0 requires an argument." | ||
exit 1 | ||
fi | ||
|
||
if test ! -f "$1" ; then | ||
echo "file does not exist: $1" | ||
exit 1 | ||
fi | ||
|
||
# Do not create a change id if requested | ||
if test "false" = "$(git config --bool --get gerrit.createChangeId)" ; then | ||
exit 0 | ||
fi | ||
|
||
# Do not create a change id for squash commits. | ||
if head -n1 "$1" | grep -q '^squash! '; then | ||
exit 0 | ||
fi | ||
|
||
if git rev-parse --verify HEAD >/dev/null 2>&1; then | ||
refhash="$(git rev-parse HEAD)" | ||
else | ||
refhash="$(git hash-object -t tree /dev/null)" | ||
fi | ||
|
||
random=$({ git var GIT_COMMITTER_IDENT ; echo "$refhash" ; cat "$1"; } | git hash-object --stdin) | ||
dest="$1.tmp.${random}" | ||
|
||
trap 'rm -f "$dest" "$dest-2"' EXIT | ||
|
||
if ! git stripspace --strip-comments < "$1" > "${dest}" ; then | ||
echo "cannot strip comments from $1" | ||
exit 1 | ||
fi | ||
|
||
if test ! -s "${dest}" ; then | ||
echo "file is empty: $1" | ||
exit 1 | ||
fi | ||
|
||
reviewurl="$(git config --get gerrit.reviewUrl)" | ||
if test -n "${reviewurl}" ; then | ||
token="Link" | ||
value="${reviewurl%/}/id/I$random" | ||
pattern=".*/id/I[0-9a-f]\{40\}$" | ||
else | ||
token="Change-Id" | ||
value="I$random" | ||
pattern=".*" | ||
fi | ||
|
||
if git interpret-trailers --parse < "$1" | grep -q "^$token: $pattern$" ; then | ||
exit 0 | ||
fi | ||
|
||
# There must be a Signed-off-by trailer for the code below to work. Insert a | ||
# sentinel at the end to make sure there is one. | ||
# Avoid the --in-place option which only appeared in Git 2.8 | ||
if ! git interpret-trailers \ | ||
--trailer "Signed-off-by: SENTINEL" < "$1" > "$dest-2" ; then | ||
echo "cannot insert Signed-off-by sentinel line in $1" | ||
exit 1 | ||
fi | ||
|
||
# Make sure the trailer appears before any Signed-off-by trailers by inserting | ||
# it as if it was a Signed-off-by trailer and then use sed to remove the | ||
# Signed-off-by prefix and the Signed-off-by sentinel line. | ||
# Avoid the --in-place option which only appeared in Git 2.8 | ||
# Avoid the --where option which only appeared in Git 2.15 | ||
if ! git -c trailer.where=before interpret-trailers \ | ||
--trailer "Signed-off-by: $token: $value" < "$dest-2" | | ||
sed -e "s/^Signed-off-by: \($token: \)/\1/" \ | ||
-e "/^Signed-off-by: SENTINEL/d" > "$dest" ; then | ||
echo "cannot insert $token line in $1" | ||
exit 1 | ||
fi | ||
|
||
if ! mv "${dest}" "$1" ; then | ||
echo "cannot mv ${dest} to $1" | ||
exit 1 | ||
fi |