diff --git a/ghpr-api.el b/ghpr-api.el index 1cfeb21..ca2422b 100644 --- a/ghpr-api.el +++ b/ghpr-api.el @@ -82,6 +82,28 @@ Returns a list of pull request objects on success, nil on failure." (message "Error fetching pull requests: %s" error-thrown))))) result)) +(defun ghpr--get-pr (repo-name pr-number) + "Retrieve a single pull request by PR-NUMBER in REPO-NAME. +Returns a parsed PR object on success, nil on failure." + (let ((token (ghpr--get-token)) + (url (format "https://api.github.com/repos/%s/pulls/%s" repo-name pr-number)) + (result nil)) + (when token + (request url + :type "GET" + :headers `(("Accept" . "application/vnd.github+json") + ("Authorization" . ,(format "Bearer %s" token)) + ("X-GitHub-Api-Version" . "2022-11-28")) + :parser 'json-read + :sync t + :success (cl-function + (lambda (&key data &allow-other-keys) + (setq result (ghpr--parse-api-pr data)))) + :error (cl-function + (lambda (&key error-thrown &allow-other-keys) + (message "Error fetching PR: %s" error-thrown))))) + result)) + (defun ghpr--get-diff-content (repo-name pr-number) "Retrieve the diff contents for PR-NUMBER in REPO-NAME." (let ((token (ghpr--get-token)) diff --git a/ghpr.el b/ghpr.el index 6bba261..6e780bf 100644 --- a/ghpr.el +++ b/ghpr.el @@ -54,6 +54,15 @@ (let ((pr (cdr (assoc selected-item pr-items)))) (ghpr--open-pr pr repo-name)))))))) +(defun ghpr-open-pr (pr-number) + "Open a specific pull request by PR-NUMBER." + (interactive "nPR number: ") + (let* ((repo-name (ghpr--get-repo-name)) + (pr (when repo-name (ghpr--get-pr repo-name pr-number)))) + (if pr + (ghpr--open-pr pr repo-name) + (message "Could not open PR #%d" pr-number)))) + (provide 'ghpr) ;;; ghpr.el ends here