Add a first shot at "git am if not already there".
Change-Id: I7d662732ddaa8035ee273df2f9c936507da27c93
diff --git a/tools/git-if-needed/sh/git-if-needed b/tools/git-if-needed/sh/git-if-needed
new file mode 100755
index 0000000..ec81f36
--- /dev/null
+++ b/tools/git-if-needed/sh/git-if-needed
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+set -e
+
+if [ "$#" -ne 2 ]; then
+ echo 'Usage: git if-needed command filename' 1>&2
+ exit 1
+fi
+cmd="$1"
+fname="$2"
+
+if [ ! -e "$fname" ] || [ ! -f "$fname" ] || [ ! -r "$fname" ]; then
+ echo "Not a readable regular file: $fname" 1>&2
+ exit 1
+fi
+chgid="$(egrep -e '^[[:space:]]*Change-Id:[[:space:]]+I[0-9a-f]+$' -- "$fname" | awk '{ print $2 }')"
+if ! expr "x$chgid" : 'xI[0-9a-f][0-9a-f]*$' > /dev/null; then
+ echo "Expected a single Change-Id line in $fname" 1>&2
+ exit 1
+fi
+
+if git --no-pager log | egrep -qe "^[[:space:]]+Change-Id:[[:space:]]+${chgid}\$"; then
+ echo "# Change $chgid already present in the Git history"
+elif git --no-pager "$cmd" -- "$fname"; then
+ echo "# 'git $cmd $fname' succeeded"
+else
+ echo "# 'git $cmd $fname' failed"
+ git --no-pager status || echo "# 'git status' also failed"
+ exit 1
+fi