mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
fe9d83d881
Useful for either dev testing or merging PRs to dev branches. Also stop updating local repo state beyond merging the PR.
113 lines
3.0 KiB
Bash
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)"
|
|
}
|