summaryrefslogtreecommitdiff
path: root/util/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'util/scripts')
-rwxr-xr-xutil/scripts/cross-repo-cherrypick47
1 files changed, 47 insertions, 0 deletions
diff --git a/util/scripts/cross-repo-cherrypick b/util/scripts/cross-repo-cherrypick
new file mode 100755
index 0000000000..4b098c199c
--- /dev/null
+++ b/util/scripts/cross-repo-cherrypick
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# rebase.sh - rebase helper script
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+
+# Adapt to your remote branch:
+BRANCH="cros/chromeos-2016.05"
+
+# When pulling in patches from another tree from a gerrit repository,
+# do the following at the end of a larger cherry-pick series:
+# git remote add ...
+# git checkout -b upstreaming
+# git cherry-pick ...
+# git rebase -i --exec util/gitconfig/rebase.sh master
+# Alternatively, you can run util/gitconfig/rebase.sh after every
+# individual cherry-pick.
+
+commit_message() {
+ git log -n 1 | grep "^ " | cut -c5-
+}
+
+CHID=$( commit_message | grep -i "^Change-Id: I" )
+CID=$( git log -n1 --grep "^$CHID$" --pretty=%H $BRANCH )
+GUID="$(git config user.name) <$(git config user.email)>"
+
+# TBD: Don't add Original- to empty lines, and possibly make script more
+# solid for commits with an unexpected order of meta data lines.
+
+commit_message | tac | awk '/^$/ {
+ if (end==0)
+ print "Original-Commit-Id: '"$CID"'\nSigned-off-by: '"$GUID"'";
+ end=1
+ }; {
+ if (end==0)
+ print "Original-" $0;
+ else
+ print $0;
+ }' | tac | git commit --amend -F -