Hi,
I would like you to review the following patch:
https://gerrit.libreoffice.org/5748
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/libvisio refs/changes/48/5748/1
add automatic git hook setting in autogen.sh
Change-Id: I95eb02dc2d347337d7b85f85d6459353278fb137
---
A .git-hooks/README
A .git-hooks/commit-msg
A .git-hooks/post-merge
A .git-hooks/pre-commit
M autogen.sh
5 files changed, 366 insertions(+), 7 deletions(-)
diff --git a/.git-hooks/README b/.git-hooks/README
new file mode 100644
index 0000000..c6612bc
--- /dev/null
+++ b/.git-hooks/README
@@ -0,0 +1,9 @@
+Git hooks are executable scripts you can place in $GIT_DIR/hooks directory to trigger action at
certain points.
+
+There are two groups of these hooks: client side and server side.
+The client-side hooks:
+are for client operations such as committing and merging.
+The server-side hooks:
+are for Git server operations such as receiving pushed commits.
+
+See Also [ http://git-scm.com/book/en/Customizing-Git-Git-Hooks ]
\ No newline at end of file
diff --git a/.git-hooks/commit-msg b/.git-hooks/commit-msg
new file mode 100755
index 0000000..e3dfe69
--- /dev/null
+++ b/.git-hooks/commit-msg
@@ -0,0 +1,181 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# 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.
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+base_dir=$(dirname $0)
+MSG="$1"
+
+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
+
+if [ "`head -n 1 $1 | wc -c`" -gt 79 ] ; then
+ abort "$1" "The first line is too long, please try to fit into 79 characters."
+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 for whitespace in front of *'s
+
+if [ -n "`sed '/^#/,$d' $1 | grep '^[[:space:]]\+\*.*:'`" -a -z "`grep '^\*' $1`" ] ; then
+ abort "$1" "Please don't use whitespace in front of '* file: Description.' entries."
+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
+
+
+#------------------ copied gerrit commit-msg hook to handle ChangeId -->
+# From Gerrit Code Review 2.3
+#
+# Part of Gerrit Code Review (http://code.google.com/p/gerrit/)
+#
+# 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.
+#
+
+CHANGE_ID_AFTER="Bug|Issue"
+
+# Check for, and add if missing, a unique Change-Id
+#
+add_ChangeId() {
+ clean_message=`sed -e '
+ /^diff --git a\/.*/{
+ s///
+ q
+ }
+ /^Signed-off-by:/d
+ /^#/d
+ ' "$MSG" | git stripspace`
+ if test -z "$clean_message"
+ then
+ return
+ fi
+
+ id=`grep -i '^Change-Id:' "$MSG" | sed -e "s/.*: I//"`
+ temp_msg=`grep -v -i '^Change-Id:' "$MSG"`
+ echo "$temp_msg" > "$MSG"
+
+ if test -z "$id"
+ then
+ id=`_gen_ChangeId`
+ fi
+ perl -e '
+ $MSG = shift;
+ $id = shift;
+ $CHANGE_ID_AFTER = shift;
+
+ undef $/;
+ open(I, $MSG); $_ = <I>; close I;
+ s|^diff --git a/.*||ms;
+ s|^#.*$||mg;
+ exit unless $_;
+
+ @message = split /\n/;
+ $haveFooter = 0;
+ $startFooter = @message;
+ for($line = @message - 1; $line >= 0; $line--) {
+ $_ = $message[$line];
+
+ if (/^[a-zA-Z0-9-]+: /) {
+ $haveFooter++;
+ next;
+ }
+ next if /^[ []/;
+ $startFooter = $line if ($haveFooter && /^\r?$/);
+ last;
+ }
+
+ @footer = @message[$startFooter+1..@message];
+ @message = @message[0..$startFooter];
+ push(@footer, "") unless @footer;
+
+ for ($line = 0; $line < @footer; $line++) {
+ $_ = $footer[$line];
+ next if /^($CHANGE_ID_AFTER):/i;
+ last;
+ }
+ splice(@footer, $line, 0, "Change-Id: I$id");
+
+ $_ = join("\n", @message, @footer);
+ open(O, ">$MSG"); print O; close O;
+ ' "$MSG" "$id" "$CHANGE_ID_AFTER"
+}
+_gen_ChangeIdInput() {
+ echo "tree `git write-tree`"
+ if parent=`git rev-parse HEAD^0 2>/dev/null`
+ then
+ echo "parent $parent"
+ fi
+ echo "author `git var GIT_AUTHOR_IDENT`"
+ echo "committer `git var GIT_COMMITTER_IDENT`"
+ echo
+ printf '%s' "$clean_message"
+}
+_gen_ChangeId() {
+ _gen_ChangeIdInput |
+ git hash-object -t commit --stdin
+}
+
+
+add_ChangeId
+#------------------ copied gerrit commit-msg hook to handle ChangeId <--
+
+
+exit 0
diff --git a/.git-hooks/post-merge b/.git-hooks/post-merge
new file mode 100755
index 0000000..25e62ed
--- /dev/null
+++ b/.git-hooks/post-merge
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# Do not warn if there were no real merge
+git rev-parse -q --verify HEAD^2 >/dev/null || exit
+
+echo
+echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+echo "! You probably used 'git pull' instead of 'git pull -r' !"
+echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+echo
+echo "You can still fix it - please do 'git pull -r' now."
+echo
diff --git a/.git-hooks/pre-commit b/.git-hooks/pre-commit
new file mode 100755
index 0000000..fdd07ad
--- /dev/null
+++ b/.git-hooks/pre-commit
@@ -0,0 +1,139 @@
+#!/usr/bin/env perl
+
+# A hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message
+# if it wants to stop the commit.
+
+use strict;
+#use File::Copy;
+#use Cwd;
+
+$ENV{LC_ALL} = "C";
+
+sub check_whitespaces($)
+{
+ my ($h) = @_;
+ my $src_limited =
"c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|MK|pmk|pl|pm|sdi|sh|src|tab|ui|xcu|xml";
+ my $src_full =
"c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|mk|MK|pmk|pl|pm|sdi|sh|src|tab|ui|xcu|xml";
+
+ my $found_bad = 0;
+ my $filename;
+ my $reported_filename = "";
+ my $lineno;
+ sub bad_line
+ {
+ my ($why, $line, $file_filter) = @_;
+ if (!defined $file_filter || $filename =~ /\.($file_filter)$/)
+ {
+ if (!$found_bad)
+ {
+ print STDERR "*\n";
+ print STDERR "* You have some suspicious patch lines:\n";
+ print STDERR "*\n";
+ $found_bad = 1;
+ }
+ if ($reported_filename ne $filename)
+ {
+ print STDERR "* In $filename\n";
+ $reported_filename = $filename;
+ }
+ print STDERR "* $why (line $lineno)\n";
+ print STDERR "$filename:$lineno:$line\n";
+ }
+ }
+ open( FILES, "git-diff-index -p -M --cached $h |" ) || die "Cannot run git diff-index.";
+ while (<FILES>)
+ {
+ if (m|^diff --git a/(.*) b/\1$|)
+ {
+ $filename = $1;
+ next;
+ }
+ if (/^@@ -\S+ \+(\d+)/)
+ {
+ $lineno = $1 - 1;
+ next;
+ }
+ if (/^ /)
+ {
+ $lineno++;
+ next;
+ }
+ if (s/^\+//)
+ {
+ $lineno++;
+ chomp;
+ if (/\s$/)
+ {
+ bad_line("trailing whitespace", $_ , $src_limited);
+ }
+ if (/\s* /)
+ {
+ bad_line("indent with Tab", $_, $src_limited);
+ }
+ if (/^(?:[<>=]){7}$/)
+ {
+ bad_line("unresolved merge conflict", $src_full);
+ }
+ if (/SAL_DEBUG/)
+ {
+ bad_line("temporary debug in commit", $_, $src_limited);
+ }
+ if (/<property name="use_markup">True<\/property>/)
+ {
+ bad_line("use font attributes instead of use-markup", $_, $src_limited);
+ }
+ }
+ }
+ if ( $found_bad)
+ {
+ exit($found_bad);
+ }
+}
+
+# Do the work :-)
+
+# Initial commit: diff against an empty tree object
+my $against="4b825dc642cb6eb9a060e54bf8d69288fbee4904";
+if ( system( "git rev-parse --verify HEAD >/dev/null 2>&1" ) == 0 )
+{
+ $against="HEAD"
+}
+
+# If you want to allow non-ascii filenames set this variable to true.
+my $allownonascii=`git config hooks.allownonascii`;
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if ( $allownonascii ne "true" &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ `git diff --cached --name-only --diff-filter=A -z $against | \
+ LC_ALL=C tr -d '[ -~]\\0'` ne "" )
+{
+ print <<EOM;
+Error: Attempt to add a non-ascii file name.
+
+This can cause problems if you want to work
+with people on other platforms.
+
+To be portable it is advisable to rename the file ...
+
+If you know what you are doing you can disable this
+check using:
+
+ git config hooks.allownonascii true
+
+EOM
+ exit( 1 );
+}
+
+# fix whitespace in code
+check_whitespaces( $against);
+
+# all OK
+exit( 0 );
+# vi:set shiftwidth=4 expandtab:
diff --git a/autogen.sh b/autogen.sh
index 02903a2..fcb084b 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,4 +1,20 @@
#!/bin/sh
+
+set_git_hooks()
+{
+ # assume that the current directory is the source tree
+ if [ -d ".git" ] ; then
+ for hook in $(ls -1 .git-hooks) ; do
+ cd .git/hooks
+ if [ ! -e "${hook?}" -o -L "${hook?}" ] ; then
+ rm -f "${hook?}"
+ ln -sf "../../.git-hooks/${hook?}" "${hook?}"
+ fi
+ cd - > /dev/null
+ done
+ fi
+}
+
TESTLIBTOOLIZE="glibtoolize libtoolize"
LIBTOOLIZEFOUND="0"
@@ -8,6 +24,8 @@
olddir=`pwd`
cd $srcdir
+
+set_git_hooks
aclocal --version > /dev/null 2> /dev/null || {
echo "error: aclocal not found"
@@ -19,16 +37,16 @@
}
for i in $TESTLIBTOOLIZE; do
- if which $i > /dev/null 2>&1; then
- LIBTOOLIZE=$i
- LIBTOOLIZEFOUND="1"
- break
- fi
+ if which $i > /dev/null 2>&1; then
+ LIBTOOLIZE=$i
+ LIBTOOLIZEFOUND="1"
+ break
+ fi
done
if [ "$LIBTOOLIZEFOUND" = "0" ]; then
- echo "$0: need libtoolize tool to build libvisio" >&2
- exit 1
+ echo "$0: need libtoolize tool to build libvisio" >&2
+ exit 1
fi
amcheck=`automake --version | grep 'automake (GNU automake) 1.5'`
--
To view, visit https://gerrit.libreoffice.org/5748
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I95eb02dc2d347337d7b85f85d6459353278fb137
Gerrit-PatchSet: 1
Gerrit-Project: libvisio
Gerrit-Branch: master
Gerrit-Owner: Fridrich Strba <fridrich@documentfoundation.org>
Gerrit-Reviewer: Norbert Thiebaud <nthiebaud@gmail.com>
Context
- [PATCH] add automatic git hook setting in autogen.sh · Fridrich Strba (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.