|
|
@@ -0,0 +1,101 @@
|
|
|
+#!/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
|