1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/usr/bin/env bash
- #
- # mfup
- #
- # - Fetch latest upstream and replace the PR Target branch with
- # - Rebase the (current or specified) branch on the PR Target
- # - Force-push the branch to 'origin'
- # -
- #
-
- [[ $# < 2 ]] || { echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1; }
-
- MFINFO=$(mfinfo "$@") || exit 1
- IFS=' ' read -a INFO <<< "$MFINFO"
- ORG=${INFO[0]}
- FORK=${INFO[1]}
- REPO=${INFO[2]}
- TARG=${INFO[3]}
- BRANCH=${INFO[4]}
- OLDBRANCH=${INFO[5]}
-
- set -e
-
- # Prevent accidental loss of current changes
- [[ $(git stash) != "No local "* ]] && HAS_STASH=1
-
- echo "Fetching upstream ($ORG/$REPO)..."
- git fetch upstream
-
- echo ; echo "Bringing $TARG up to date..."
- if [[ ! $(git checkout -q $TARG) ]]; then
- git reset --hard upstream/$TARG
- git push -f origin
- else
- git checkout upstream/$TARG -b $TARG
- git push --set-upstream origin $TARG
- fi
-
- if [[ $BRANCH != $TARG ]]; then
- echo ; echo "Rebasing $BRANCH on $TARG..."
- if git checkout $BRANCH; then
- echo
- if git rebase $TARG; then
- git push -f
- else
- echo "Looks like merge conflicts. Stopping here." ; exit
- fi
- else
- echo "No such branch!"
- fi
- fi
-
- echo
- [[ $BRANCH != $OLDBRANCH ]] && git checkout $OLDBRANCH
-
- [[ $HAS_STASH == 1 ]] && git stash pop
|