#!/bin/sh
# From Gerrit Code Review v2.0.19.1-4-g21d307b
#
# 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.
# 

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)
	out="$MSG.OUT"
	ftt="$MSG.FTT"
	sed -e  '2,${
			/^[A-Za-z][A-Za-z0-9-]*: /,$d
		}' <"$MSG" >"$out"
	sed -ne '2,${
			/^[A-Za-z][A-Za-z0-9-]*: /,$p
		}' <"$MSG" >"$ftt"
	if ! test -s "$ftt"
	then
		echo >>"$out"
	fi
	echo "Change-Id: I$id" >>"$out"
	cat "$ftt" >>"$out"
	mv -f "$out" "$MSG"
	rm -f "$out" "$ftt"
}
_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
