c5eb63edde
This mainly replaces the whole AWK code with the git helper "interpret-trailers", which was added in git v2.2 end of 2014. It also moves the argument checks from the original Gerrit hook to the front of our tests to verify the script arguments. Change-Id: I38c831bf7c9d399419a598d6966e48166d31ea6f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87369 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
135 lines
4 KiB
Bash
Executable file
135 lines
4 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Called by git-commit with one argument, the name of the file
|
|
# that has the commit message. The hook should exit with non-zero
|
|
# status after issuing an appropriate message if it wants to stop the
|
|
# commit. The hook is allowed to edit the commit message file.
|
|
#
|
|
# To enable this hook, make this file executable.
|
|
|
|
# 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
|
|
|
|
abort() {
|
|
cp $1 $1.save
|
|
cat >&2 <<EOF
|
|
Commit aborted, your commit message was saved as '$1.save'.
|
|
|
|
Reason: $2
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
|
abort "$1" "Duplicate Signed-off-by lines."
|
|
}
|
|
|
|
# Check that the first line exists, and is not an asterisk
|
|
|
|
if [ -z "`head -n 1 $1 | grep -v '^[[:blank:]]*\*$'`" ] ; then
|
|
abort "$1" "Please provide the general description on the first line."
|
|
fi
|
|
|
|
# ...and that it is not too long
|
|
|
|
len="`head -n 1 $1 | tr -d '\n' | wc -c`"
|
|
if [ "$len" -gt 79 ] ; then
|
|
abort "$1" "The first line is $len characters, please try to fit into 79 characters."
|
|
fi
|
|
|
|
fdo_regex='fdo#[0-9]+'
|
|
if egrep -q "$fdo_regex" $1; then
|
|
for bugid in `head -n 1 $1 |egrep -o "$fdo_regex" |sed 's/fdo#//'`
|
|
do
|
|
if [ "`echo $bugid |sed 's/fdo#//'`" -gt 88775 ]; then
|
|
abort "$1" "The first line contains a suspicious fdo# rereference: 'fdo#$bugid', did you mean tdf#?"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# ...and that it does not continue on the second line
|
|
if [ "`wc -l < $1`" -gt 1 -a -n "`head -n 2 $1 | tail -n 1 | sed 's/^#.*//'`" ] ; then
|
|
abort "$1" "The second line is not empty - maybe the first line continues there?"
|
|
fi
|
|
|
|
# Check that the message is not a ChangeLog-like one
|
|
|
|
if [ -n "`head -n 1 $1 | grep '^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}.*<.*@.*>'`" ] ; then
|
|
abort "$1" "The commit message looks like ChangeLog, please use the git form."
|
|
fi
|
|
|
|
# Check that lines do not start with '#<something>' (possibly accidental commit,
|
|
# such as starting the message with '#ifdef', git commits start with '#<whitespace>'.
|
|
|
|
if [ -n "`grep '^#[^[:blank:]]' $1`" ] ; then
|
|
abort "$1" "Possible accidental comment in the commit message (leading # without space)."
|
|
fi
|
|
|
|
# From Gerrit Code Review 2.16.15
|
|
#
|
|
# 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.
|
|
|
|
# Do not create a change id if requested
|
|
if test "false" = "`git config --bool --get gerrit.createChangeId`" ; then
|
|
exit 0
|
|
fi
|
|
|
|
# $RANDOM will be undefined if not using bash, so don't use set -u
|
|
random=$( (whoami ; hostname ; date; cat $1 ; echo $RANDOM) | git hash-object --stdin)
|
|
dest="$1.tmp.${random}"
|
|
|
|
trap 'rm -f "${dest}"' 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
|
|
|
|
# Avoid the --in-place option which only appeared in Git 2.8
|
|
# Avoid the --if-exists option which only appeared in Git 2.15
|
|
if ! git -c trailer.ifexists=doNothing interpret-trailers \
|
|
--trailer "Change-Id: I${random}" < "$1" > "${dest}" ; then
|
|
echo "cannot insert change-id line in $1"
|
|
exit 1
|
|
fi
|
|
|
|
if ! mv "${dest}" "$1" ; then
|
|
echo "cannot mv ${dest} to $1"
|
|
exit 1
|
|
fi
|
|
|
|
#------------------ copied gerrit commit-msg hook to handle ChangeId <--
|
|
|
|
exit 0
|
|
|
|
# vi:set shiftwidth=4 expandtab:
|