123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/bin/sh
- # From Gerrit Code Review 2.2.1
- #
- # 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];
- if (/^[a-zA-Z0-9-]+:/ && !m,^[a-z0-9-]+://,) {
- $haveFooter++;
- next;
- }
- 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
|