Binding to make org hls for requested changes
This commit is contained in:
parent
91e19984b3
commit
712f997de1
2 changed files with 99 additions and 67 deletions
68
config.el
68
config.el
|
@ -25,6 +25,7 @@
|
|||
;; (load! "nix-yapf-mode")
|
||||
(load! "show-matching-paren")
|
||||
(load! "irc")
|
||||
(load! "github-org")
|
||||
|
||||
(require 's)
|
||||
|
||||
|
@ -1080,73 +1081,6 @@
|
|||
|
||||
(cl-defstruct pull-request url number title author repository)
|
||||
|
||||
(defun grfn/alist->plist (alist)
|
||||
(->> alist
|
||||
(-mapcat (lambda (pair)
|
||||
(list (intern (concat ":" (symbol-name (car pair))))
|
||||
(cdr pair))))))
|
||||
|
||||
(defun grfn/review-requests ()
|
||||
(let ((resp (ghub-graphql "query reviewRequests {
|
||||
reviewRequests: search(
|
||||
type:ISSUE,
|
||||
query: \"is:open is:pr review-requested:glittershark archived:false\",
|
||||
first: 100
|
||||
) {
|
||||
issueCount
|
||||
nodes {
|
||||
... on PullRequest {
|
||||
url
|
||||
number
|
||||
title
|
||||
author {
|
||||
login
|
||||
... on User { name }
|
||||
}
|
||||
repository {
|
||||
name
|
||||
owner { login }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}")))
|
||||
(->> resp
|
||||
(alist-get 'data)
|
||||
(alist-get 'reviewRequests)
|
||||
(alist-get 'nodes)
|
||||
(-map
|
||||
(lambda (pr)
|
||||
(apply
|
||||
#'make-pull-request
|
||||
(grfn/alist->plist pr)))))))
|
||||
|
||||
(defun grfn/pr->org-headline (level pr)
|
||||
(check-type level integer)
|
||||
(check-type pr pull-request)
|
||||
(format "%s TODO Review %s's PR on %s/%s: %s :pr:
|
||||
SCHEDULED: <%s>"
|
||||
(make-string level ?*)
|
||||
(->> pr (pull-request-author) (alist-get 'name))
|
||||
(->> pr (pull-request-repository)
|
||||
(alist-get 'owner)
|
||||
(alist-get 'login))
|
||||
(->> pr (pull-request-repository) (alist-get 'name))
|
||||
(org-make-link-string
|
||||
(pull-request-url pr)
|
||||
(pull-request-title pr))
|
||||
(format-time-string "%Y-%m-%d %a")))
|
||||
|
||||
(require 'ghub)
|
||||
(defun grfn/org-headlines-from-review-requests (level)
|
||||
"Create org-mode headlines at LEVEL from all review-requested PRs on Github"
|
||||
(interactive "*nLevel: ")
|
||||
(let* ((prs (grfn/review-requests))
|
||||
(text (mapconcat (apply-partially #'grfn/pr->org-headline level) prs "\n")))
|
||||
(save-mark-and-excursion
|
||||
(insert text))
|
||||
(org-align-tags 't)))
|
||||
|
||||
(defun grfn/num-inbox-items ()
|
||||
(length (org-elements-agenda-match "inbox" t)))
|
||||
|
||||
|
|
98
github-org.el
Normal file
98
github-org.el
Normal file
|
@ -0,0 +1,98 @@
|
|||
;;; ~/.doom.d/github-org.el -*- lexical-binding: t; -*-
|
||||
|
||||
(require 'ghub)
|
||||
|
||||
(defun grfn/alist->plist (alist)
|
||||
(->> alist
|
||||
(-mapcat (lambda (pair)
|
||||
(list (intern (concat ":" (symbol-name (car pair))))
|
||||
(cdr pair))))))
|
||||
|
||||
;;;
|
||||
|
||||
(cl-defstruct pull-request url number title author repository)
|
||||
|
||||
(defun grfn/query-pulls (query)
|
||||
(let ((resp (ghub-graphql "query reviewRequests($query: String!) {
|
||||
reviewRequests: search(
|
||||
type:ISSUE,
|
||||
query: $query,
|
||||
first: 100
|
||||
) {
|
||||
issueCount
|
||||
nodes {
|
||||
... on PullRequest {
|
||||
url
|
||||
number
|
||||
title
|
||||
author {
|
||||
login
|
||||
... on User { name }
|
||||
}
|
||||
repository {
|
||||
name
|
||||
owner { login }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}" `((query . ,query)))))
|
||||
(->> resp
|
||||
(alist-get 'data)
|
||||
(alist-get 'reviewRequests)
|
||||
(alist-get 'nodes)
|
||||
(-map
|
||||
(lambda (pr)
|
||||
(apply
|
||||
#'make-pull-request
|
||||
(grfn/alist->plist pr)))))))
|
||||
|
||||
(defun grfn/requested-changes ())
|
||||
|
||||
(defun grfn/pull-request->org-headline (format-string level pr)
|
||||
(check-type format-string string)
|
||||
(check-type level integer)
|
||||
(check-type pr pull-request)
|
||||
(s-format (concat (make-string level ?*) " " format-string)
|
||||
#'aget
|
||||
`((author . ,(->> pr (pull-request-author) (alist-get 'name)))
|
||||
(owner . ,(->> pr (pull-request-repository)
|
||||
(alist-get 'owner)
|
||||
(alist-get 'login)))
|
||||
(repo . ,(->> pr (pull-request-repository) (alist-get 'name)))
|
||||
(pr-link . ,(org-make-link-string
|
||||
(pull-request-url pr)
|
||||
(pull-request-title pr)))
|
||||
(today . ,(format-time-string "%Y-%m-%d %a")))))
|
||||
|
||||
(defun grfn/org-headlines-from-review-requests (level)
|
||||
"Create org-mode headlines at LEVEL from all review-requested PRs on Github"
|
||||
(interactive "*nLevel: ")
|
||||
(let* ((prs (grfn/query-pulls
|
||||
"is:open is:pr review-requested:glittershark archived:false"))
|
||||
(text (mapconcat
|
||||
(apply-partially
|
||||
#'grfn/pull-request->org-headline
|
||||
"TODO Review ${author}'s PR on ${owner}/${repo}: ${pr-link} :pr:
|
||||
SCHEDULED: <${today}>"
|
||||
level) prs "\n")))
|
||||
(save-mark-and-excursion
|
||||
(insert text))
|
||||
(org-align-tags 't)))
|
||||
|
||||
(defun grfn/org-headlines-from-requested-changes (level)
|
||||
"Create org-mode headlines at LEVEL from all PRs with changes requested
|
||||
on Github"
|
||||
(interactive "*nLevel: ")
|
||||
(let* ((prs (grfn/query-pulls
|
||||
(concat "is:pr is:open author:glittershark archived:false "
|
||||
"sort:updated-desc review:changes-requested")))
|
||||
(text (mapconcat
|
||||
(apply-partially
|
||||
#'grfn/pull-request->org-headline
|
||||
"TODO Address review comments on ${pr-link} :pr:
|
||||
SCHEDULED: <${today}>"
|
||||
level) prs "\n")))
|
||||
(save-mark-and-excursion
|
||||
(insert text))
|
||||
(org-align-tags 't)))
|
Loading…
Reference in a new issue