File tree Expand file tree Collapse file tree 4 files changed +47
-0
lines changed Expand file tree Collapse file tree 4 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -915,6 +915,36 @@ This may take a while. Only Github is supported at the moment."
915
915
(read-string " Organization: " )))
916
916
(forge--add-organization-repos 'forge-github-repository host organization))
917
917
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
+
918
948
;;;### autoload
919
949
(defun forge-remove-repository (host owner name )
920
950
" Remove a repository from the database."
Original file line number Diff line number Diff line change 652
652
`((organization . , fork ))))
653
653
(ghub-wait (format " /repos/%s /%s " fork name) nil :auth 'forge )))
654
654
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
+
655
662
; ;; Utilities
656
663
657
664
(cl-defun forge--ghub-get (obj resource
Original file line number Diff line number Diff line change 543
543
(ghub-wait (format " /projects/%s%% 2F%s " fork name)
544
544
nil :auth 'forge :forge 'gitlab )))
545
545
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
+
546
553
; ;; Utilities
547
554
548
555
(cl-defmethod forge--topic-type-prefix ((_repo forge-gitlab-repository) type)
Original file line number Diff line number Diff line change 105
105
(transient-append-suffix 'magit-status-jump " 'p"
106
106
'(" 'i" " issues" forge-jump-to-issues))
107
107
108
+ (transient-append-suffix 'magit-merge " a"
109
+ '(7 " f" " Merge using API" forge-merge))
110
+
108
111
; ;; Startup Asserts
109
112
110
113
(defconst forge--minimal-git " 2.7.0" )
You can’t perform that action at this time.
0 commit comments