mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 15:36:21 -04:00
* Format comparisons and functions to be consistent * Add `checkstyle.py` script and add check to CI * Fix Ruff lints
84 lines
2.3 KiB
Bash
Executable file
84 lines
2.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
PROGRAM=$0
|
|
PRIMARY_BRANCH=""
|
|
SECONDARY_BRANCH=""
|
|
FF="--ff"
|
|
CONTINUE="no"
|
|
|
|
current_branch() {
|
|
git rev-parse --abbrev-ref HEAD
|
|
}
|
|
|
|
function usage()
|
|
{
|
|
echo "USAGE: ${PROGRAM} PRIMARY_BRANCH [SECONDARY_BRANCH] [--no-ff]"
|
|
echo "USAGE: ${PROGRAM} --continue"
|
|
echo ""
|
|
echo "OPTIONS:"
|
|
echo " --no-ff: Force rebase commit."
|
|
echo " -c|--continue: Continue after the user updates conflicts."
|
|
}
|
|
|
|
while [[ $# -gt 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)
|
|
SECONDARY_BRANCH=${TARGET_BRANCH%"-rebased-on-top-of-"*}
|
|
PRIMARY_BRANCH=${TARGET_BRANCH#*"-rebased-on-top-of-"}
|
|
if [[ "${SECONDARY_BRANCH}-rebased-on-top-of-${PRIMARY_BRANCH}" != $TARGET_BRANCH ]]; then
|
|
echo "Couldn't continue rebasing on ${TARGET_BRANCH}"
|
|
exit 30 # Impossible to detect PRIMARY_BRANCH AND SECONDARY_BRANCH
|
|
fi
|
|
|
|
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
|
|
|
|
if git merge "${SECONDARY_BRANCH}" ${FF} \
|
|
-m "Psycho-rebased branch ${SECONDARY_BRANCH} on top of ${PRIMARY_BRANCH}"; 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
|