[Libreoffice-commits] .: git-hooks/commit-msg

Norbert Thiebaud nthiebaud at kemper.freedesktop.org
Thu Apr 26 15:35:54 PDT 2012


 git-hooks/commit-msg |  109 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 106 insertions(+), 3 deletions(-)

New commits:
commit 18118cd9c581659fa6f9aef1e1729e87c9fd1bba
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Thu Apr 26 17:25:52 2012 -0500

    add gerrit ChangeId generation to commit-msg git hook
    
    Change-Id: I30c370f0479743a831be29a0fa7cb447c7119ee4

diff --git a/git-hooks/commit-msg b/git-hooks/commit-msg
index f2bcb3f..f8df4e2 100755
--- a/git-hooks/commit-msg
+++ b/git-hooks/commit-msg
@@ -15,6 +15,7 @@
 # This example catches duplicate Signed-off-by lines.
 
 base_dir=$(dirname $0)
+MSG="$1"
 
 abort() {
     cp $1 $1.save
@@ -61,8 +62,110 @@ if [ -n "`sed '/^#/,$d' $1 | grep '^[[:space:]]\+\*.*:'`" -a -z "`grep '^\*' $1`
     abort "$1" "Please don't use whitespace in front of '* file: Description.' entries."
 fi
 
-if [ -f "${base_dir}/gerrit-commit-msg" ] ; then
-    source "${base_dir}/gerrit-commit-msg"
-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
+
+        if grep -i '^Change-Id:' "$MSG" >/dev/null
+        then
+                return
+        fi
+
+        id=`_gen_ChangeId`
+        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-]+:/ && !m,^[a-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


More information about the Libreoffice-commits mailing list