1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/tools/lib/PR_bash.source
Anthony Bilinski fe9d83d881
chore(tools): allow merging PR to whatever branch is checked out
Useful for either dev testing or merging PRs to dev branches. Also stop
updating local repo state beyond merging the PR.
2019-10-09 23:16:33 -07:00

113 lines
3.0 KiB
Bash

#!/bin/bash
#
# Copyright © 2016 Zetok Zalbavar <zetok@openmailbox.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Source for bash functions used in `/{merge,test}-pr.sh`.
#
# Only to be sourced in those files.
set -e -o pipefail
# check if supplied var is a number; if not exit
is_pr_number() {
[[ "$@" =~ ^[[:digit:]]+$ ]]
}
exit_if_not_pr() {
is_pr_number $@ \
|| (echo "Not a PR number!" \
&& exit 1 )
}
# check if remote is present
is_remote_present() {
git remote \
| grep $@ > /dev/null
}
# there's no qTox remote, add it
# if `https` is supplied, https version of repo is used
add_remote() {
local remote_url="git@github.com:qTox/qTox.git"
local remote_name="upstream"
# change to https if needed
[[ "$@" == "https" ]] \
&& local remote_url="https://github.com/qTox/qTox.git"
is_remote_present $remote_name \
|| git remote add $remote_name "${remote_url}"
}
# print the message only if the merge was successful
#
# supply either `merge`, `test` or whatever else merge branch name you want
after_merge_msg() {
echo ""
echo "PR #$PR was merged into «$@$PR» branch."
echo "To compare with $base_branch:"
echo ""
echo " git diff $base_branch..$@$PR"
echo ""
if [[ "$@" == "merge" ]]
then
echo "To push that to $base_branch on github:"
echo ""
echo " git checkout $base_branch && git merge --ff $@$PR && git push upstream $base_branch"
echo ""
echo "After pushing to $base_branch, delete branches:"
echo ""
echo " git branch -d {$@,}$PR"
echo ""
fi
echo "To discard any changes:"
echo ""
echo " git checkout $base_branch && git branch -D {$@,}$PR"
echo ""
}
# print the message only if some merge step failed
after_merge_failure_msg() {
echo ""
echo "Merge failed."
echo ""
echo "You may want to remove not merged branches, if they exist:"
echo ""
echo " git checkout $base_branch && git branch -D {$@,}$PR"
echo ""
}
# force delete merged and fetched branches
rm_obsolete_branch() {
git branch -D {$merge_branch,}$PR 2>/dev/null || true
}
get_sources() {
add_remote
rm_obsolete_branch
git fetch $remote_name pull/$PR/head:$PR && \
git checkout $base_branch -b $merge_branch$PR
}
# check whether to sign
merge() {
"${@}" --no-ff $PR -m "Merge pull request #$PR
$OPT_MSG
$(git shortlog $base_branch..$PR)"
}