#! /bin/bash set -euo pipefail if [ "$#" -ne 2 ]; then echo "usage: merge.sh " echo "" echo "example: merge.sh dev.boringcrypto master" echo " merge.sh dev.boringcrypto.go1.10 go1.10.7" exit 1 fi TARGET="$1" SOURCE="$2" WORKTREE="$(mktemp -d)" BRANCH="boring/merge-$TARGET-$(date +%Y%m%d%H%M%S)" git fetch git worktree add --track -b "$BRANCH" "$WORKTREE" "origin/$TARGET" cd "$WORKTREE" export GIT_GOFMT_HOOK=off git merge --no-commit --no-stat "$SOURCE" || echo "Ignoring conflict..." [[ -f VERSION ]] && git rm -f VERSION git checkout --ours codereview.cfg && git add codereview.cfg git commit -m "all: merge $SOURCE into $TARGET" if ! git log --format=%B -n 1 | grep "\[$TARGET\] "; then echo "The commit does not seem to be targeting the BoringCrypto branch." echo "(Or you are missing the git-codereview hooks.)" exit 1 fi git codereview mail -trybot HEAD cd - && git worktree remove "$WORKTREE"