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! "nix-yapf-mode")
|
||||||
(load! "show-matching-paren")
|
(load! "show-matching-paren")
|
||||||
(load! "irc")
|
(load! "irc")
|
||||||
|
(load! "github-org")
|
||||||
|
|
||||||
(require 's)
|
(require 's)
|
||||||
|
|
||||||
|
@ -1080,73 +1081,6 @@
|
||||||
|
|
||||||
(cl-defstruct pull-request url number title author repository)
|
(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 ()
|
(defun grfn/num-inbox-items ()
|
||||||
(length (org-elements-agenda-match "inbox" t)))
|
(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