| @@ -2018,7 +2018,68 @@ and search from projectile root (if projectile is available)." | |||||
| (pb/push-item '("") text "note" (or title ""))) | (pb/push-item '("") text "note" (or title ""))) | ||||
| ;;;;;;;;;;;;;;;;;;;;; | |||||
| ;; git-bug | |||||
| (defconst git-bug-ls-regexp | |||||
| (eval-when-compile | |||||
| (rx bol | |||||
| (submatch (one-or-more alphanumeric)) ; id | |||||
| ;; (one-or-more any) | |||||
| (one-or-more space) | |||||
| (submatch (or "open" "close")) ; status | |||||
| (one-or-more space) | |||||
| (submatch (maximal-match (zero-or-more print))) ; title | |||||
| "\t" | |||||
| (submatch (one-or-more alphanumeric)) ; user | |||||
| (one-or-more space) | |||||
| "C:" | |||||
| (submatch (one-or-more digit)) ; Comment num | |||||
| (one-or-more space) | |||||
| "L:" | |||||
| (submatch (one-or-more digit)) ; Label num | |||||
| eol | |||||
| )) | |||||
| "Regexp to parse line of output of git-bug ls. | |||||
| Used by `git-bug-ls'.") | |||||
| (defun git-bug--bugs () | |||||
| "Get list of git-bug bugs." | |||||
| (interactive) | |||||
| (with-temp-buffer | |||||
| (git-bug--call-process "bug" "ls") | |||||
| (goto-char (point-min)) | |||||
| (let ((bugs nil)) | |||||
| (while (not (eq (point) (point-max))) | |||||
| (save-match-data | |||||
| (when (re-search-forward git-bug-ls-regexp (point-at-eol) t) | |||||
| (setq bugs `(,@bugs | |||||
| ,(list | |||||
| :id (match-string 1) | |||||
| :status (match-string 2) | |||||
| :title (string-trim (match-string 3)) | |||||
| :user (match-string 4) | |||||
| :comment-num (match-string 5) | |||||
| :label-num (match-string 6) | |||||
| ))))) | |||||
| (forward-line 1) | |||||
| (goto-char (point-at-bol))) | |||||
| bugs))) | |||||
| (defun git-bug--call-process (&rest args) | |||||
| "Start git process synchronously with ARGS. | |||||
| Raise error when git process ends with non-zero status. | |||||
| Any output will be written to current buffer." | |||||
| (let ((status (apply 'call-process | |||||
| "git" | |||||
| nil | |||||
| t | |||||
| nil | |||||
| args))) | |||||
| (cl-assert (eq status 0) | |||||
| nil | |||||
| (buffer-substring-no-properties (point-min) (point-max))))) | |||||
| ;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;; | ||||