[Libreoffice-commits] libcdr.git: autogen.sh .git-hooks/commit-msg .git-hooks/post-merge .git-hooks/pre-commit .git-hooks/README

Norbert Thiebaud nthiebaud at gmail.com
Mon Sep 2 01:24:23 PDT 2013


 .git-hooks/README     |    9 ++
 .git-hooks/commit-msg |  181 ++++++++++++++++++++++++++++++++++++++++++++++++++
 .git-hooks/post-merge |   12 +++
 .git-hooks/pre-commit |  139 ++++++++++++++++++++++++++++++++++++++
 autogen.sh            |   32 ++++++--
 5 files changed, 366 insertions(+), 7 deletions(-)

New commits:
commit 833c85d2c01f94a1c415274b0d816a2ea5e7c1e6
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Sun Sep 1 14:09:36 2013 -0500

    add automatic git hook setting in autogen.sh
    
    Change-Id: I95eb02dc2d347337d7b85f85d6459353278fb137
    Reviewed-on: https://gerrit.libreoffice.org/5745
    Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
    Tested-by: Fridrich Strba <fridrich at documentfoundation.org>

diff --git a/.git-hooks/README b/.git-hooks/README
new file mode 100644
index 0000000..3ddd71a
--- /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.. at 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 b62e743..8622534 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"
@@ -9,6 +25,8 @@ test -z "$srcdir" && srcdir=.
 olddir=`pwd`
 cd $srcdir
 
+set_git_hooks
+
 aclocal --version > /dev/null 2> /dev/null || {
     echo "error: aclocal not found"
     exit 1
@@ -19,16 +37,16 @@ automake --version > /dev/null 2> /dev/null || {
 }
 
 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 libcdr" >&2
-	exit 1
+        echo "$0: need libtoolize tool to build libcdr" >&2
+        exit 1
 fi
 
 amcheck=`automake --version | grep 'automake (GNU automake) 1.5'`


More information about the Libreoffice-commits mailing list