forked from gromacs/gromacs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgit-pre-commit
executable file
·140 lines (132 loc) · 4.49 KB
/
git-pre-commit
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/bash
#
# This file is part of the GROMACS molecular simulation package.
#
# Copyright (c) 2013,2014,2015,2019, by the GROMACS development team, led by
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
# and including many others, as listed in the AUTHORS file in the
# top-level source directory and at http://www.gromacs.org.
#
# GROMACS is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation; either version 2.1
# of the License, or (at your option) any later version.
#
# GROMACS 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with GROMACS; if not, see
# http://www.gnu.org/licenses, or write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# If you want to redistribute modifications to GROMACS, please
# consider that scientific software is very special. Version
# control is crucial - bugs must be traceable. We will be happy to
# consider code for inclusion in the official distribution, but
# derived work must not be called official GROMACS. Details are found
# in the README & COPYING files - if they are missing, get the
# official version at http://www.gromacs.org.
#
# To help us fund GROMACS development, we humbly ask that you cite
# the research papers on the package. Check out http://www.gromacs.org.
# This script is intended as a pre-commit hook that optionally runs all
# changes through some formatting check. Currently, it runs uncrustify and
# checks copyright headers.
#
# It needs to be copied as .git/hooks/pre-commit and configured with
# git config hooks.uncrustifypath /path/to/uncrustify
# git config hooks.uncrustifymode check
# git config hooks.copyrightmode update
#
# To disable the hook temporarily for a commit, set NO_FORMAT_CHECK environment
# variable. For example,
# NO_FORMAT_CHECK=1 git commit -a
# You can also run git commit --no-verify, but that also disables other hooks,
# such as the Change-Id hook used by Gerrit.
#
# See docs/dev-manual/uncrustify.rst for more details.
if [ ! -z "$NO_FORMAT_CHECK" ]
then
exit 0
fi
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# Redirect output to stderr.
exec 1>&2
uncrustify_mode=off
clangformat_mode=`git config hooks.clangformatmode`
copyright_mode=`git config hooks.copyrightmode`
if [ -z "$uncrustify_mode" ]
then
uncrustify_mode=off
fi
if [ -z "$clangformat_mode" ]
then
clangformat_mode=off
fi
if [ -z "$copyright_mode" ]
then
copyright_mode=off
fi
if [[ -f admin/uncrustify.sh && \
( "$uncrustify_mode" != "off" ) ]]
then
uncrustify_path=`git config hooks.uncrustifypath`
if [ -z "$uncrustify_path" ]
then
echo "Please set the path to uncrustify using 'git config hooks.uncrustifypath'."
echo "Note that you need a custom version of uncrustify."
exit 1
fi
export UNCRUSTIFY="$uncrustify_path"
admin/uncrustify.sh check-index --rev=$against \
--uncrustify="$uncrustify_mode"
stat=$?
if [ $stat -eq 1 ] ; then
exit 1
elif [ $stat -ne 0 ] ; then
echo "Source code formatting check with uncrustify failed"
exit 1
fi
fi
if [[ -f admin/clang-format.sh && \
( "$clangformat_mode" != "off" ) ]]
then
clangformat_path=`git config hooks.clangformatpath`
if [ -z "$clangformat_path" ]
then
echo "Please set the path to clang-format using 'git config hooks.clangformatpath'."
exit 1
fi
export CLANG_FORMAT="$clangformat_path"
admin/clang-format.sh check-index --rev=$against \
--format="$clangformat_mode"
stat=$?
if [ $stat -eq 1 ] ; then
exit 1
elif [ $stat -ne 0 ] ; then
echo "Source code formatting check with clang-format failed"
exit 1
fi
fi
if [[ -f admin/copyright.sh && \
( "$copyright_mode" != "off" ) ]]
then
admin/copyright.sh check-index --rev=$against \
--copyright="$copyright_mode"
stat=$?
if [ $stat -eq 1 ] ; then
exit 1
elif [ $stat -ne 0 ] ; then
echo "Copyright information check failed"
exit 1
fi
fi