mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-29 16:14:47 +00:00
9452e4ec09
Most users of repo are also using Gerrit Code Review, and will want
the commit-msg hook to be automatically installed into their local
projects so that Change-Ids are assigned when commits are created,
not when they are first uploaded.
(cherry picked from commit a949fa5d20
but squashed with latest hook script from version 2.1.2)
Change-Id: Ie68b2d60ac85d8c2285d2e1e6a4536eb76695547
Signed-off-by: Shawn O. Pearce <sop@google.com>
102 lines
2.3 KiB
Bash
Executable File
102 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# From Gerrit Code Review 2.1.2-rc2-33-g7e30c72
|
|
#
|
|
# 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"
|
|
MSG="$1"
|
|
|
|
# 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];
|
|
|
|
($haveFooter++, next) if /^[a-zA-Z0-9-]+:/;
|
|
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
|