124 lines
3.1 KiB
Bash
Executable File
124 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
ABORT="\033[31mAbort:\033[00m"
|
|
SUCCESS="\033[32mSuccess:\033[00m"
|
|
INFO="\033[33mInfo:\033[00m"
|
|
|
|
echo -e $INFO "Checking index"
|
|
|
|
#set branch to commit to
|
|
if [[ $# -gt 0 ]]
|
|
then
|
|
PUBLISH_TO_BRANCH=$1
|
|
else
|
|
PUBLISH_TO_BRANCH="master"
|
|
fi
|
|
echo -e $INFO "branch to commit: $PUBLISH_TO_BRANCH"
|
|
|
|
# check clean index
|
|
if [[ -n $(git diff HEAD) ]]
|
|
then
|
|
echo -e $ABORT "You have uncommitted changes."
|
|
exit 1
|
|
fi
|
|
|
|
BRANCH_NAME=$(git symbolic-ref -q --short HEAD)
|
|
PUBLISH_BRANCH_NAME=_publish_"$BRANCH_NAME"_
|
|
|
|
echo -e $INFO "Checking branch $BRANCH_NAME"
|
|
|
|
# check if on branch
|
|
if [ -z $BRANCH_NAME ]
|
|
then
|
|
echo -e $ABORT "You are not on any branch."
|
|
exit 1
|
|
fi
|
|
|
|
# check if on $PUBLISH_TO_BRANCH
|
|
if [ $BRANCH_NAME == $PUBLISH_TO_BRANCH ]
|
|
then
|
|
echo -e $ABORT "You are on $PUBLISH_TO_BRANCH. Use this script only from a feature branch."
|
|
exit 1
|
|
fi
|
|
|
|
git checkout -q $PUBLISH_TO_BRANCH
|
|
git remote update &>/dev/null
|
|
|
|
echo -e $INFO "Checking $PUBLISH_TO_BRANCH"
|
|
|
|
# check if $PUBLISH_TO_BRANCH is up to date
|
|
if [[ -n $(git diff origin/$PUBLISH_TO_BRANCH) ]]
|
|
then
|
|
echo -e $ABORT "Your $PUBLISH_TO_BRANCH is not up-to-date. Run 'git-sync.sh' to update $PUBLISH_TO_BRANCH and rebase $BRANCH_NAME."
|
|
git checkout -q $BRANCH_NAME
|
|
exit 1
|
|
fi
|
|
|
|
PUBLIC_BRANCH_HEAD_COMMIT=$(git rev-parse HEAD)
|
|
BASE_COMMIT=$(git merge-base $BRANCH_NAME $PUBLISH_TO_BRANCH)
|
|
|
|
git checkout -q $BRANCH_NAME
|
|
|
|
BRANCH_HEAD_COMMIT=$(git rev-parse HEAD)
|
|
|
|
# check if feature has commits
|
|
if [ $BRANCH_HEAD_COMMIT == $PUBLIC_BRANCH_HEAD_COMMIT ]
|
|
then
|
|
echo -e $ABORT "Your feature branch has no commits."
|
|
exit 1
|
|
fi
|
|
|
|
# check if feature is not behind $PUBLIC_BRANCH_HEAD_COMMIT
|
|
if [ $BASE_COMMIT != $PUBLIC_BRANCH_HEAD_COMMIT ]
|
|
then
|
|
echo -e $ABORT "Your feature branch is behind $PUBLISH_TO_BRANCH. Use 'git rebase $PUBLISH_TO_BRANCH' to update your feature branch."
|
|
exit 1
|
|
fi
|
|
|
|
# Prepare publish message with commit messages
|
|
GIT_DIR=$(git rev-parse --show-toplevel)/.git
|
|
cat $GIT_DIR/../setup/git/git_commit_template.txt > $GIT_DIR/PUBLISH_MSG
|
|
printf "\n# commits:\n" >> $GIT_DIR/PUBLISH_MSG
|
|
git log --graph --format=%B $BASE_COMMIT..HEAD | sed 's/^/# &/' >> $GIT_DIR/PUBLISH_MSG
|
|
|
|
# switch to temporary branch for squashing
|
|
git checkout -q -b $PUBLISH_BRANCH_NAME
|
|
|
|
echo -e $INFO "Squashing commits"
|
|
git reset --soft $BASE_COMMIT
|
|
git commit --template=$GIT_DIR/PUBLISH_MSG
|
|
|
|
if [ $? != 0 ]
|
|
then
|
|
echo -e $ABORT "Commit was aborted."
|
|
git checkout -q $BRANCH_NAME
|
|
git branch -q -D $PUBLISH_BRANCH_NAME
|
|
exit 1
|
|
fi
|
|
|
|
echo -e $INFO "Rebasing on $PUBLISH_TO_BRANCH"
|
|
git checkout -q $PUBLISH_TO_BRANCH
|
|
git rebase -q $PUBLISH_BRANCH_NAME
|
|
if [ $? != 0 ]
|
|
then
|
|
git checkout -q $BRANCH_NAME
|
|
echo -e $ABORT "Rebasing on $PUBLISH_TO_BRANCH failed because of unstaged changes."
|
|
exit 1
|
|
fi
|
|
|
|
git branch -q -d $PUBLISH_BRANCH_NAME
|
|
|
|
echo -e $INFO "Uploading to origin $PUBLISH_TO_BRANCH"
|
|
git push origin $PUBLISH_TO_BRANCH
|
|
|
|
if [ $? != 0 ]
|
|
then
|
|
git reset --hard -q HEAD^
|
|
git checkout -q $BRANCH_NAME
|
|
echo -e $ABORT "Pushing to origin $PUBLISH_TO_BRANCH has failed, there are new remote changes. Run 'git-sync.sh' to update $PUBLISH_TO_BRANCH and rebase $BRANCH_NAME."
|
|
exit 1
|
|
fi
|
|
|
|
echo -e $SUCCESS "Published $BRANCH_NAME successfully"
|
|
exit 0
|