dotfiles/bin/cf_merge_branches
2014-06-26 00:12:52 -07:00

61 lines
1.1 KiB
Bash
Executable file

#!/bin/bash
set -e
. /nail/workflow/pushlib.sh
usage() {
echo "$0 <branch1> <branch2> ..."
exit 1
}
main() {
BRANCH_NAMES=${@:1}
BRANCH_BASE="origin/master"
TARGET="$(git-branch-name)"
colorize git fetch origin
colorize git reset --hard $BRANCH_BASE
merge-branches $TARGET $BRANCH_NAMES
separator
list-pushplans $TARGET $BRANCH_BASE
}
merge-branches() {
DEPLOY=$1
BRANCH_NAMES=${@:2}
for BRANCH_NAME in $BRANCH_NAMES
do
separator
if ! colorize git merge --no-ff --no-commit "origin/$BRANCH_NAME"; then
echo -e "${RED}Unable to merge $BRANCH_NAME.${NORMAL}"
git diff
reset_branch_and_abort $DEPLOY
fi
git merge --abort
colorize git merge --no-ff "origin/$BRANCH_NAME"
done
}
list-pushplans() {
TARGET=$1
BASE=$2
echo -e "${PURPLE}Pushplans present in this deploy:${NORMAL}"
git diff --name-only "$(git merge-base "$TARGET" "$BASE")..$TARGET" -- pushplans
}
reset-branch-and-abort() {
RESET_TARGET=$1
RESET_SHA="$(git rev-parse "$RESET_TARGET")"
separator
git reset --hard "$RESET_SHA"
make clean
separator
echo -e "Aborted."
exit 1
}
main $@