2 95fee1d4 2014-11-17 rsc # From Gerrit Code Review 2.2.1
4 95fee1d4 2014-11-17 rsc # Part of Gerrit Code Review (http://code.google.com/p/gerrit/)
6 95fee1d4 2014-11-17 rsc # Copyright (C) 2009 The Android Open Source Project
8 95fee1d4 2014-11-17 rsc # Licensed under the Apache License, Version 2.0 (the "License");
9 95fee1d4 2014-11-17 rsc # you may not use this file except in compliance with the License.
10 95fee1d4 2014-11-17 rsc # You may obtain a copy of the License at
12 95fee1d4 2014-11-17 rsc # http://www.apache.org/licenses/LICENSE-2.0
14 95fee1d4 2014-11-17 rsc # Unless required by applicable law or agreed to in writing, software
15 95fee1d4 2014-11-17 rsc # distributed under the License is distributed on an "AS IS" BASIS,
16 95fee1d4 2014-11-17 rsc # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 95fee1d4 2014-11-17 rsc # See the License for the specific language governing permissions and
18 95fee1d4 2014-11-17 rsc # limitations under the License.
21 95fee1d4 2014-11-17 rsc CHANGE_ID_AFTER="Bug|Issue"
24 95fee1d4 2014-11-17 rsc # Check for, and add if missing, a unique Change-Id
26 95fee1d4 2014-11-17 rsc add_ChangeId() {
27 95fee1d4 2014-11-17 rsc clean_message=`sed -e '
28 95fee1d4 2014-11-17 rsc /^diff --git a\/.*/{
32 95fee1d4 2014-11-17 rsc /^Signed-off-by:/d
34 95fee1d4 2014-11-17 rsc ' "$MSG" | git stripspace`
35 95fee1d4 2014-11-17 rsc if test -z "$clean_message"
40 95fee1d4 2014-11-17 rsc if grep -i '^Change-Id:' "$MSG" >/dev/null
45 95fee1d4 2014-11-17 rsc id=`_gen_ChangeId`
47 95fee1d4 2014-11-17 rsc $MSG = shift;
49 95fee1d4 2014-11-17 rsc $CHANGE_ID_AFTER = shift;
52 95fee1d4 2014-11-17 rsc open(I, $MSG); $_ = <I>; close I;
53 95fee1d4 2014-11-17 rsc s|^diff --git a/.*||ms;
55 95fee1d4 2014-11-17 rsc exit unless $_;
57 95fee1d4 2014-11-17 rsc @message = split /\n/;
58 95fee1d4 2014-11-17 rsc $haveFooter = 0;
59 95fee1d4 2014-11-17 rsc $startFooter = @message;
60 95fee1d4 2014-11-17 rsc for($line = @message - 1; $line >= 0; $line--) {
61 95fee1d4 2014-11-17 rsc $_ = $message[$line];
63 95fee1d4 2014-11-17 rsc if (/^[a-zA-Z0-9-]+:/ && !m,^[a-z0-9-]+://,) {
64 95fee1d4 2014-11-17 rsc $haveFooter++;
67 95fee1d4 2014-11-17 rsc next if /^[ []/;
68 95fee1d4 2014-11-17 rsc $startFooter = $line if ($haveFooter && /^\r?$/);
72 95fee1d4 2014-11-17 rsc @footer = @message[$startFooter+1..@message];
73 95fee1d4 2014-11-17 rsc @message = @message[0..$startFooter];
74 95fee1d4 2014-11-17 rsc push(@footer, "") unless @footer;
76 95fee1d4 2014-11-17 rsc for ($line = 0; $line < @footer; $line++) {
77 95fee1d4 2014-11-17 rsc $_ = $footer[$line];
78 95fee1d4 2014-11-17 rsc next if /^($CHANGE_ID_AFTER):/i;
81 95fee1d4 2014-11-17 rsc splice(@footer, $line, 0, "Change-Id: I$id");
83 95fee1d4 2014-11-17 rsc $_ = join("\n", @message, @footer);
84 95fee1d4 2014-11-17 rsc open(O, ">$MSG"); print O; close O;
85 95fee1d4 2014-11-17 rsc ' "$MSG" "$id" "$CHANGE_ID_AFTER"
87 95fee1d4 2014-11-17 rsc _gen_ChangeIdInput() {
88 95fee1d4 2014-11-17 rsc echo "tree `git write-tree`"
89 95fee1d4 2014-11-17 rsc if parent=`git rev-parse HEAD^0 2>/dev/null`
91 95fee1d4 2014-11-17 rsc echo "parent $parent"
93 95fee1d4 2014-11-17 rsc echo "author `git var GIT_AUTHOR_IDENT`"
94 95fee1d4 2014-11-17 rsc echo "committer `git var GIT_COMMITTER_IDENT`"
96 95fee1d4 2014-11-17 rsc printf '%s' "$clean_message"
98 95fee1d4 2014-11-17 rsc _gen_ChangeId() {
99 95fee1d4 2014-11-17 rsc _gen_ChangeIdInput |
100 95fee1d4 2014-11-17 rsc git hash-object -t commit --stdin
104 95fee1d4 2014-11-17 rsc add_ChangeId