#!/usr/bin/env sh
# cross-repo-cherrypick - rebase helper script
#
# SPDX-License-Identifier: GPL-2.0-only

# Adapt to your remote branch:
BRANCH="origin/master"

# 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/scripts/cross-repo-cherrypick master
# Alternatively, you can run util/scripts/cross-repo-cherrypick after every
# individual cherry-pick.

# use $0 --cros to add a stub BUG/BRANCH/TEST block

commit_message() {
	git log -n 1 | grep "^    " | cut -c5-
}

ORIGIN_HOST=$( commit_message |grep "^Reviewed-on: " |head -1 |cut -d/ -f3 )
case "${ORIGIN_HOST}" in
	review.coreboot.org)
		BRANCH="origin/master"
		MESSAGE_PREFIX="UPSTREAM: "
		;;
	chromium-review.googlesource.com)
		BRANCH="cros/chromeos-2016.05"
		MESSAGE_PREFIX=""
		;;
esac

# lines must be backwards due to tac(1)
SPLICE_CMD=""
if test "$1" = "--cros"; then
	if test -z "$( commit_message |egrep '^(BUG|TEST)=')"; then
		SPLICE_CMD='print "\nTEST=none\nBRANCH=none\nBUG=none\n"'
	fi
fi

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.

(printf "${MESSAGE_PREFIX}"; commit_message) | tac | awk '/^$/ {
		if (end==0) {
			print "Original-Commit-Id: '"${CID}"'\nSigned-off-by: '"${GUID}"'";
			'"${SPLICE_CMD}"'
		}
		end=1
	}; /^(BUG|BRANCH|TEST)=/ {
		if (end==0) {
			print "Original-Commit-Id: '"${CID}"'\nSigned-off-by: '"${GUID}"'";
			print "";
		}
		end=1
	}; /^Cq-Depend:/ {
		print $0;
		next
	}; {
		if (end==0)
			print "Original-" $0;
		else
			print $0;
	}' | tac | git commit --amend -F -
