Skip to content

Commit 3112ade

Browse files
committed
1 parent ddb4357 commit 3112ade

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

lisp/forge-commands.el

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,36 @@ This may take a while. Only Github is supported at the moment."
915915
(read-string "Organization: ")))
916916
(forge--add-organization-repos 'forge-github-repository host organization))
917917

918+
;;;###autoload
919+
(defun forge-merge (n method)
920+
"Merge the current pull-request using METHOD using the forge's API.
921+
922+
If there is no current pull-request or with a prefix argument,
923+
then read pull-request N to visit instead.
924+
925+
Use of this command is discouraged. Unless the remote repository
926+
is configured to disallow that, you should instead merge locally
927+
and then push the target branch. Forges detect that you have
928+
done that and respond by automatically marking the pull-request
929+
as merged."
930+
(interactive
931+
(list (forge-read-pullreq "Merge pull-request" t)
932+
(if (forge--childp (forge-get-repository t) 'forge-gitlab-repository)
933+
(magit-read-char-case "Merge method " t
934+
(?m "[m]erge" 'merge)
935+
(?s "[s]quash" 'squash))
936+
(magit-read-char-case "Merge method " t
937+
(?m "[m]erge" 'merge)
938+
(?s "[s]quash" 'squash)
939+
(?r "[r]ebase" 'rebase)))))
940+
(forge--merge-pullreq (forge-get-repository t)
941+
(forge-get-pullreq n)
942+
(magit-rev-hash
943+
(forge--pullreq-branch-internal
944+
(forge-get-pullreq n)))
945+
method)
946+
(forge-pull))
947+
918948
;;;###autoload
919949
(defun forge-remove-repository (host owner name)
920950
"Remove a repository from the database."

lisp/forge-github.el

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,13 @@
652652
`((organization . ,fork))))
653653
(ghub-wait (format "/repos/%s/%s" fork name) nil :auth 'forge)))
654654

655+
(cl-defmethod forge--merge-pullreq ((_repo forge-github-repository)
656+
topic hash method)
657+
(forge--ghub-put topic
658+
"/repos/:owner/:repo/pulls/:number/merge"
659+
`((merge_method . ,(symbol-name method))
660+
,@(and hash `((sha . ,hash))))))
661+
655662
;;; Utilities
656663

657664
(cl-defun forge--ghub-get (obj resource

lisp/forge-gitlab.el

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,13 @@
543543
(ghub-wait (format "/projects/%s%%2F%s" fork name)
544544
nil :auth 'forge :forge 'gitlab)))
545545

546+
(cl-defmethod forge--merge-pullreq ((_repo forge-gitlab-repository)
547+
topic hash method)
548+
(forge--glab-put topic
549+
"/projects/:project/merge_requests/:number/merge"
550+
`((squash . ,(if (eq method 'squash) "true" "false"))
551+
,@(and hash `((sha . ,hash))))))
552+
546553
;;; Utilities
547554

548555
(cl-defmethod forge--topic-type-prefix ((_repo forge-gitlab-repository) type)

lisp/forge.el

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@
105105
(transient-append-suffix 'magit-status-jump "'p"
106106
'("'i" "issues" forge-jump-to-issues))
107107

108+
(transient-append-suffix 'magit-merge "a"
109+
'(7 "f" "Merge using API" forge-merge))
110+
108111
;;; Startup Asserts
109112

110113
(defconst forge--minimal-git "2.7.0")

0 commit comments

Comments
 (0)