-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathgit-pre-commit
More file actions
executable file
·106 lines (95 loc) · 3.16 KB
/
git-pre-commit
File metadata and controls
executable file
·106 lines (95 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash
#############################################################################
# Copyright (c) 2008,2009,2015 Novell, Inc.
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, contact Novell, Inc.
#
# To contact Novell about this file by physical or electronic mail,
# you may find current contact information at www.novell.com
#############################################################################
#
# to be run from the pre-commit hook, runs check-patch{hdr,fmt} on every added
# or modified file in patches.*/
err=0
confirm=0
parse_comment()
{
local sha="$1"
local comment="$2"
local pattern='same|dup'
if [[ ${comment,,} =~ $pattern ]]; then
confirm=1
else
return
fi
echo "WARNING: if you are blacklisting commit: $sha because it's a duplicate of an existing patch,"
echo " add 'Alt-commit: $sha' in the patch instead"
}
for dir in "$(git rev-parse --show-cdup)" "" "../"; do
dir="${dir}scripts"
if test -x "$dir/check-patchfmt"; then
break
fi
done
tmp=$(mktemp /tmp/check-patch.XXXXXXXXXX)
trap "rm -f $tmp" EXIT
in_merge=$(test -f "$(git rev-parse --git-path MERGE_HEAD)" -o -f "$(git rev-parse --git-path AUTO_MERGE)" && echo M)
git diff-index --name-status --diff-filter=AM --cached HEAD | (
while read stat file garbage; do
update=
if [ "$stat" = "M" ]; then
update="--update"
fi
case "$file" in
patches.*/*)
git cat-file blob :$file >"$tmp"
if [ -z "$(diffstat -p1 -l "$tmp")" ] ; then
echo "$file" is empty patch
err=1
fi
"$dir/check-patchhdr" $update --stdin "$file" <"$tmp" || err=1
"$dir/check-patchfmt" --stdin "$file" <"$tmp" || err=1
"$dir/check-patch-blacklist" $(dirname "$dir")/blacklist.conf "$file" <$tmp || err=1
;;
blacklist.conf)
while IFS='#' read -r sha comment
do
# remove leading +, spaces and trailing spaces from sha
sha="${sha#"+${sha%%[![:space:]]*}"}"
sha="${sha%"${sha##*[![:space:]]}"}"
git --no-pager grep -iFr --cached "commit: $sha" patches.* && \
{ echo "Commit $sha would be blacklisted, consider excluding them from blacklist.conf." ; err=1 ; }
[[ -n "$comment" ]] && parse_comment $sha "$comment"
done < <(git diff-index -p --cached HEAD blacklist.conf | grep '^+[0-9a-f]\{40\}')
;;
esac
done
if [[ $confirm -eq 1 ]]; then
read -p "Abort commit because of the warning? [y/n] " -n 1 -r < /dev/tty
[[ $REPLY != n ]] && err=1
echo
fi
config_sh="$dir/../rpm/config.sh"
series_conf="$dir/../series.conf"
if [ -r "$config_sh" ]; then
. "$config_sh"
fi
if [ "$SORT_SERIES" = "yes" -a -r "$series_conf" ] && \
! "$dir/git_sort/pre-commit.sh"; then
err=1
fi
if test "$err" != 0; then
echo "Aborting."
exit "$err"
fi ) || exit