Blame


1 95fee1d4 2014-11-17 rsc #!/bin/sh
2 95fee1d4 2014-11-17 rsc # From Gerrit Code Review 2.2.1
3 95fee1d4 2014-11-17 rsc #
4 95fee1d4 2014-11-17 rsc # Part of Gerrit Code Review (http://code.google.com/p/gerrit/)
5 95fee1d4 2014-11-17 rsc #
6 95fee1d4 2014-11-17 rsc # Copyright (C) 2009 The Android Open Source Project
7 95fee1d4 2014-11-17 rsc #
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
11 95fee1d4 2014-11-17 rsc #
12 95fee1d4 2014-11-17 rsc # http://www.apache.org/licenses/LICENSE-2.0
13 95fee1d4 2014-11-17 rsc #
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.
19 95fee1d4 2014-11-17 rsc #
20 95fee1d4 2014-11-17 rsc
21 95fee1d4 2014-11-17 rsc CHANGE_ID_AFTER="Bug|Issue"
22 95fee1d4 2014-11-17 rsc MSG="$1"
23 95fee1d4 2014-11-17 rsc
24 95fee1d4 2014-11-17 rsc # Check for, and add if missing, a unique Change-Id
25 95fee1d4 2014-11-17 rsc #
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\/.*/{
29 95fee1d4 2014-11-17 rsc s///
30 95fee1d4 2014-11-17 rsc q
31 95fee1d4 2014-11-17 rsc }
32 95fee1d4 2014-11-17 rsc /^Signed-off-by:/d
33 95fee1d4 2014-11-17 rsc /^#/d
34 95fee1d4 2014-11-17 rsc ' "$MSG" | git stripspace`
35 95fee1d4 2014-11-17 rsc if test -z "$clean_message"
36 95fee1d4 2014-11-17 rsc then
37 95fee1d4 2014-11-17 rsc return
38 95fee1d4 2014-11-17 rsc fi
39 95fee1d4 2014-11-17 rsc
40 95fee1d4 2014-11-17 rsc if grep -i '^Change-Id:' "$MSG" >/dev/null
41 95fee1d4 2014-11-17 rsc then
42 95fee1d4 2014-11-17 rsc return
43 95fee1d4 2014-11-17 rsc fi
44 95fee1d4 2014-11-17 rsc
45 95fee1d4 2014-11-17 rsc id=`_gen_ChangeId`
46 95fee1d4 2014-11-17 rsc perl -e '
47 95fee1d4 2014-11-17 rsc $MSG = shift;
48 95fee1d4 2014-11-17 rsc $id = shift;
49 95fee1d4 2014-11-17 rsc $CHANGE_ID_AFTER = shift;
50 95fee1d4 2014-11-17 rsc
51 95fee1d4 2014-11-17 rsc undef $/;
52 95fee1d4 2014-11-17 rsc open(I, $MSG); $_ = <I>; close I;
53 95fee1d4 2014-11-17 rsc s|^diff --git a/.*||ms;
54 95fee1d4 2014-11-17 rsc s|^#.*$||mg;
55 95fee1d4 2014-11-17 rsc exit unless $_;
56 95fee1d4 2014-11-17 rsc
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];
62 95fee1d4 2014-11-17 rsc
63 95fee1d4 2014-11-17 rsc if (/^[a-zA-Z0-9-]+:/ && !m,^[a-z0-9-]+://,) {
64 95fee1d4 2014-11-17 rsc $haveFooter++;
65 95fee1d4 2014-11-17 rsc next;
66 95fee1d4 2014-11-17 rsc }
67 95fee1d4 2014-11-17 rsc next if /^[ []/;
68 95fee1d4 2014-11-17 rsc $startFooter = $line if ($haveFooter && /^\r?$/);
69 95fee1d4 2014-11-17 rsc last;
70 95fee1d4 2014-11-17 rsc }
71 95fee1d4 2014-11-17 rsc
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;
75 95fee1d4 2014-11-17 rsc
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;
79 95fee1d4 2014-11-17 rsc last;
80 95fee1d4 2014-11-17 rsc }
81 95fee1d4 2014-11-17 rsc splice(@footer, $line, 0, "Change-Id: I$id");
82 95fee1d4 2014-11-17 rsc
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"
86 95fee1d4 2014-11-17 rsc }
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`
90 95fee1d4 2014-11-17 rsc then
91 95fee1d4 2014-11-17 rsc echo "parent $parent"
92 95fee1d4 2014-11-17 rsc fi
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`"
95 95fee1d4 2014-11-17 rsc echo
96 95fee1d4 2014-11-17 rsc printf '%s' "$clean_message"
97 95fee1d4 2014-11-17 rsc }
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
101 95fee1d4 2014-11-17 rsc }
102 95fee1d4 2014-11-17 rsc
103 95fee1d4 2014-11-17 rsc
104 95fee1d4 2014-11-17 rsc add_ChangeId