mirror of
https://github.com/tj/git-extras.git
synced 2026-09-11 07:56:18 -04:00
Create a bash version of git-psykorebase — Fixes #411
This commit is contained in:
parent
3c5523617e
commit
d8395ba2e9
86
bin/git-psykorebase
Executable file
86
bin/git-psykorebase
Executable file
|
|
@ -0,0 +1,86 @@
|
|||
#!/usr/bin/env bash
|
||||
PROGRAM=$0
|
||||
PRIMARY_BRANCH=""
|
||||
SECONDARY_BRANCH=""
|
||||
FF="--ff"
|
||||
CONTINUE="no"
|
||||
|
||||
function current_branch() {
|
||||
git rev-parse --abbrev-ref HEAD
|
||||
}
|
||||
|
||||
function usage()
|
||||
{
|
||||
echo "USAGE: ${PROGRAM} PRIMARY_BRANCH [SECONDARY_BRANCH]"
|
||||
echo "USAGE: ${PROGRAM} --continue"
|
||||
echo ""
|
||||
echo "OPTIONS:"
|
||||
echo " --no-ff: Force rebase commit."
|
||||
echo " -c|--continue: Continue after the user updates conflicts."
|
||||
}
|
||||
|
||||
while [[ $# > 0 ]]
|
||||
do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
--no-ff)
|
||||
FF="--no-ff"
|
||||
;;
|
||||
-c|--continue)
|
||||
CONTINUE=yes
|
||||
;;
|
||||
*)
|
||||
if [[ "$PRIMARY_BRANCH" == "" ]]; then
|
||||
PRIMARY_BRANCH=$key
|
||||
elif [[ "$SECONDARY_BRANCH" == "" ]]; then
|
||||
SECONDARY_BRANCH=$key
|
||||
else
|
||||
usage
|
||||
exit 20 # Error during arguments parsing
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift # past argument or value
|
||||
done
|
||||
|
||||
if [[ "$SECONDARY_BRANCH" == "" ]]; then
|
||||
SECONDARY_BRANCH=$(current_branch)
|
||||
fi
|
||||
|
||||
if [[ "$CONTINUE" == "yes" ]]; then
|
||||
TARGET_BRANCH=$(current_branch)
|
||||
set $(echo "$TARGET_BRANCH" | sed -e "s/-rebased-on-top-of-/\n/g")
|
||||
if [[ $# != 2 ]]; then
|
||||
echo "Couldn't continue rebasing on ${TARGET_BRANCH}"
|
||||
exit 30 # Impossible to detect PRIMARY_BRANCH AND SECONDARY_BRANCH
|
||||
fi
|
||||
|
||||
SECONDARY_BRANCH=$1
|
||||
PRIMARY_BRANCH=$2
|
||||
|
||||
echo "Continuing rebasing of $SECONDARY_BRANCH on top of $PRIMARY_BRANCH"
|
||||
git commit || exit 51
|
||||
git branch -d ${SECONDARY_BRANCH} || exit 52
|
||||
git branch -m ${TARGET_BRANCH} ${SECONDARY_BRANCH} || exit 53
|
||||
|
||||
elif [[ "$PRIMARY_BRANCH" == "" ]]; then
|
||||
usage
|
||||
exit 10 # Missing arguments PRiMARY_BRANCH
|
||||
else
|
||||
echo "Rebasing $SECONDARY_BRANCH on top of $PRIMARY_BRANCH"
|
||||
TARGET_BRANCH="${SECONDARY_BRANCH}-rebased-on-top-of-${PRIMARY_BRANCH}"
|
||||
|
||||
git checkout ${PRIMARY_BRANCH} || exit 41
|
||||
git checkout -b ${TARGET_BRANCH} || exit 42
|
||||
git merge ${SECONDARY_BRANCH} ${FF} \
|
||||
-m "Psycho-rebased branch ${SECONDARY_BRANCH} on top of ${PRIMARY_BRANCH}"
|
||||
|
||||
if [[ $? == 0 ]]; then
|
||||
git branch -d ${SECONDARY_BRANCH} || exit 43
|
||||
git branch -m ${TARGET_BRANCH} ${SECONDARY_BRANCH} || exit 44
|
||||
else
|
||||
echo "Resolve the conflict and run ``${PROGRAM} --continue``."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
Loading…
Reference in a new issue