Binding to make org hls for requested changes

This commit is contained in:
Griffin Smith 2020-05-26 10:22:37 -04:00
parent 91e19984b3
commit 712f997de1
2 changed files with 99 additions and 67 deletions

View file

@ -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
View 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)))