push-to-pull-request: Add --merge option.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2021-01-22 10:48:09 -08:00
committed by Tim Abbott
parent 26a7b7196c
commit 50121cce5e

View File

@@ -13,6 +13,8 @@ GitHub to see the subsequent push to master as representing a
merge of the PR, rather than requiring the PR to be manually merge of the PR, rather than requiring the PR to be manually
(and to the casual observer misleadingly) closed instead. (and to the casual observer misleadingly) closed instead.
With --merge, also go ahead and merge the PR.
REMOTE defaults to the value of the Git config variable REMOTE defaults to the value of the Git config variable
\`zulip.zulipRemote\` if set, else to \`upstream\`. \`zulip.zulipRemote\` if set, else to \`upstream\`.
@@ -24,15 +26,21 @@ See also \`reset-to-pull-request\`.
EOF EOF
} }
args="$(getopt -o '' --long help -n "$0" -- "$@")" args="$(getopt -o '' --long help,merge -n "$0" -- "$@")"
eval "set -- $args" eval "set -- $args"
merge=
while true; do while true; do
case "$1" in case "$1" in
--help) --help)
usage usage
exit 0 exit 0
;; ;;
--merge)
merge=t
shift
;;
--) --)
shift shift
break break
@@ -107,6 +115,15 @@ if [ "$(pr_jq .maintainer_can_modify)" != "true" ]; then
exit 1 exit 1
fi fi
if [ "$merge" ]; then
pr_base_ref="$(pr_jq -r .base.ref)"
git fetch -- "$remote"
if ! git merge-base --is-ancestor -- "$remote/$pr_base_ref" @; then
echo "error: You need to rebase on $remote/$pr_base_ref first" >&2
exit 1
fi
fi
pr_head_repo_fq="$(pr_jq -r .head.repo.full_name)" pr_head_repo_fq="$(pr_jq -r .head.repo.full_name)"
pr_head_refname="$(pr_jq -r .head.ref)" pr_head_refname="$(pr_jq -r .head.ref)"
@@ -123,3 +140,7 @@ if [ -n "$tracking_ref" ]; then
set -x set -x
git update-ref "$tracking_ref" @ git update-ref "$tracking_ref" @
fi fi
if [ "$merge" ]; then
git push -- "$remote" "@:$pr_base_ref"
fi