Update magithub
This commit is contained in:
		| @@ -5,7 +5,7 @@ | ||||
|  | ||||
| ;;;### (autoloads nil nil ("magithub-cache.el" "magithub-ci.el" "magithub-core.el" | ||||
| ;;;;;;  "magithub-issue.el" "magithub-pkg.el" "magithub.el") (22528 | ||||
| ;;;;;;  31239 328273 102000)) | ||||
| ;;;;;;  44286 378835 655000)) | ||||
| 
 | ||||
| ;;;*** | ||||
|  | ||||
| @@ -79,14 +79,12 @@ If magithub.ci.enabled is not set, CI is considered to be enabled." | ||||
| 
 | ||||
| (defun magithub-ci-status () | ||||
|   "One of 'success, 'error, 'failure, 'pending, or 'no-status." | ||||
|   (let ((same-commit | ||||
|          (string-equal (magit-rev-parse "HEAD") | ||||
|                        (magithub-ci-status-current-commit)))) | ||||
|     (unless same-commit | ||||
|       (magithub-cache-clear (magithub-repo-id) :ci-status)) | ||||
|     (if (eq (magithub-cache-value (magithub-repo-id) :ci-status) | ||||
|             'success) | ||||
|         'success | ||||
|   (unless (string-equal (magit-rev-parse "HEAD") | ||||
|                         (magithub-ci-status-current-commit)) | ||||
|     (magithub-cache-clear (magithub-repo-id) :ci-status)) | ||||
|   (let ((cached-val (magithub-cache-value (magithub-repo-id) :ci-status))) | ||||
|     (if (and (consp cached-val) (eq (plist-get (car cached-val) :status) 'success)) | ||||
|         cached-val | ||||
|       (magithub-cache (magithub-repo-id) :ci-status | ||||
|         '(magithub-ci-status--internal))))) | ||||
| 
 | ||||
| @@ -96,42 +94,32 @@ If magithub.ci.enabled is not set, CI is considered to be enabled." | ||||
|     (if new-value (apply #'magit-set new-value keys) | ||||
|       (apply #'magit-get keys)))) | ||||
| 
 | ||||
| (defun magithub-ci-update-urls (statuses) | ||||
|   "Updates `magithub-ci-urls' according to STATUSES. | ||||
| See also `magithub-repo-id'." | ||||
|   (let* ((id (magithub-repo-id)) | ||||
|          (repo-urls (assoc id magithub-ci-urls)) | ||||
|          (urls (mapcar (lambda (s) (plist-get s :url)) statuses))) | ||||
|     (if repo-urls (setcdr repo-urls urls) | ||||
|       (add-to-list 'magithub-ci-urls (cons id urls)) | ||||
|       urls))) | ||||
| 
 | ||||
| (defun magithub-ci-status--parse-2.2.8 (output) | ||||
|   "Backwards compatibility for old versions of hub. | ||||
| See `magithub-ci-status--parse'." | ||||
|   (-when-let (matches (cdr (s-match (rx bos (group (+ (any alpha space))) | ||||
|                                         (? ": " (group (+ (not (any " "))))) eos) | ||||
|                                     output))) | ||||
|     (let ((status (list :status (intern (replace-regexp-in-string "\s" "-" (car matches))) | ||||
|                         :url (cadr matches)))) | ||||
|       (magithub-ci-update-urls (list status)) | ||||
|       status))) | ||||
|     (list (list :status (intern (replace-regexp-in-string | ||||
|                                  "\s" "-" (car matches))) | ||||
|                 :url (cadr matches))))) | ||||
| 
 | ||||
| (defun magithub-ci-status--internal (&optional for-commit) | ||||
|   "One of 'success, 'error, 'failure, 'pending, or 'no-status." | ||||
|   (let* ((current-commit (magit-rev-parse "HEAD")) | ||||
|          (last-commit (or for-commit current-commit)) | ||||
|          (output (magithub--command-output "ci-status" `("-v" ,last-commit)))) | ||||
|     (-if-let (check (if (magithub-hub-version-at-least "2.3") | ||||
|                         (car (magithub-ci-status--parse output)) | ||||
|                       (magithub-ci-status--parse-2.2.8 (car output)))) | ||||
|         (prog1 (or (plist-get check :status) 'no-status) | ||||
|           (if (not (or for-commit (plist-get check :status))) | ||||
|               (let ((last-commit (magithub-ci-status--last-commit))) | ||||
|                 (unless (string-equal current-commit last-commit) | ||||
|                   (magithub-ci-status--internal last-commit)) | ||||
|                 (magithub-ci-status-current-commit current-commit)) | ||||
|             (magithub-ci-status-current-commit current-commit))) | ||||
|     (-if-let (checks (if (magithub-hub-version-at-least "2.3") | ||||
|                          (magithub-ci-status--parse output) | ||||
|                        (magithub-ci-status--parse-2.2.8 (car output)))) | ||||
|         (let ((overall-status (car checks))) | ||||
|           (prog1 (or (and (plist-get overall-status :status) checks) 'no-status) | ||||
|             (if (not (or for-commit (plist-get overall-status :status))) | ||||
|                 (let ((last-commit (magithub-ci-status--last-commit))) | ||||
|                   (unless (string-equal current-commit last-commit) | ||||
|                     (magithub-ci-status--internal last-commit)) | ||||
|                   (magithub-ci-status-current-commit current-commit)) | ||||
|               (magithub-ci-status-current-commit current-commit)))) | ||||
|       (beep) | ||||
|       (setq magithub-hub-error | ||||
|             (message | ||||
| @@ -145,7 +133,6 @@ See `magithub-ci-status--parse'." | ||||
| The first status will be an `overall' status." | ||||
|   (let ((statuses (mapcar #'magithub-ci-status--parse-line output)) | ||||
|         (get-status (lambda (status) (lambda (s) (eq (plist-get s :status) status))))) | ||||
|     (magithub-ci-update-urls statuses) | ||||
|     (cons | ||||
|      (list :check 'overall | ||||
|            :status | ||||
| @@ -236,9 +223,23 @@ See the following resources: | ||||
|   "Browse the CI. | ||||
| Sets up magithub.ci.url if necessary." | ||||
|   (interactive) | ||||
|   (let* ((urls (cdr (assoc (magithub-repo-id) magithub-ci-urls))) | ||||
|          (target-url (if (= 1 (length urls)) (car urls) | ||||
|                        (when urls (completing-read "CI Dashboard URL: " urls))))) | ||||
|   (let* ((checks (magithub-ci-status)) | ||||
|          (checks-alist | ||||
|           (magithub--zip | ||||
|            checks | ||||
|            (if (magithub-hub-version-at-least "2.3") | ||||
|                (lambda (c) | ||||
|                  (format "%S: %s" | ||||
|                          (plist-get c :status) | ||||
|                          (plist-get c :check))) | ||||
|              :status) | ||||
|            :url)) | ||||
|          (target-url | ||||
|           (if (= 1 (length checks-alist)) | ||||
|               (cdar checks-alist) | ||||
|             (when checks-alist | ||||
|               (cdr (assoc (completing-read "CI Service: " checks-alist) | ||||
|                           checks-alist)))))) | ||||
|     (when (or (null target-url) (string= "" target-url)) | ||||
|       (user-error "No CI URL detected")) | ||||
|     (browse-url target-url))) | ||||
| @@ -258,7 +259,8 @@ Sets up magithub.ci.url if necessary." | ||||
|     (magit-refresh))) | ||||
| 
 | ||||
| (defun magithub-insert-ci-status-header () | ||||
|   (let* ((status (magithub-ci-status)) | ||||
|   (let* ((checks (magithub-ci-status)) | ||||
|          (status (if (consp checks) (plist-get (car checks) :status) checks)) | ||||
|          (face   (intern (format "magithub-ci-%s" | ||||
|                                  (symbol-name status)))) | ||||
|          (status-val (cdr (assq status magithub-ci-status-alist)))) | ||||
| @@ -270,6 +272,16 @@ Sets up magithub.ci.url if necessary." | ||||
|                 ((functionp status-val) (funcall status-val)) | ||||
|                 (t (format "%S" status-val))) | ||||
|                'face (if (facep face) face 'magithub-ci-unknown))) | ||||
|       (when (and (consp checks) (not (eq status 'success)) (< 1 (length checks))) | ||||
|         (let* ((successes (-filter (lambda (c) (eq (plist-get c :status) 'success)) | ||||
|                                    checks)) | ||||
|                (numsuccesses (length successes)) | ||||
|                (numchecks (length checks))) | ||||
|           (insert | ||||
|            (format " %d succeeded; %d did not; %s for details" | ||||
|                    numsuccesses | ||||
|                    (- numchecks numsuccesses) | ||||
|                    (substitute-command-keys "\\[magit-visit-thing]"))))) | ||||
|       (insert ?\n)))) | ||||
| 
 | ||||
| (magithub--deftoggle magithub-toggle-ci-status-header | ||||
| @@ -162,7 +162,8 @@ See /.github/ISSUE_TEMPLATE.md in this repository." | ||||
|   "Non-nil if Magithub should do its thing." | ||||
|   (and (executable-find magithub-hub-executable) | ||||
|        (magithub-enabled-p) | ||||
|        (magithub-github-repository-p))) | ||||
|        (magithub-github-repository-p) | ||||
|        (magithub--api-available-p))) | ||||
| 
 | ||||
| (defun magithub-error (err-message tag &optional trace) | ||||
|   "Report a Magithub error." | ||||
| @@ -206,5 +207,33 @@ See /.github/ISSUE_TEMPLATE.md in this repository." | ||||
|        (magit-refresh)) | ||||
|      (memq ,func ,hook))) | ||||
| 
 | ||||
| (defun magithub--zip-case (p e) | ||||
|   "Get an appropriate value for element E given property/function P." | ||||
|   (cond | ||||
|    ((symbolp p) (plist-get e p)) | ||||
|    ((functionp p) (funcall p e)) | ||||
|    ((null p) e) | ||||
|    (t nil))) | ||||
| 
 | ||||
| (defun magithub--zip (object-list prop1 prop2) | ||||
|   "Process OBJECT-LIST into an alist defined by PROP1 and PROP2. | ||||
| 
 | ||||
| If a prop is a symbol, that property will be used. | ||||
| 
 | ||||
| If a prop is a function, it will be called with the | ||||
| currentelement of OBJECT-LIST. | ||||
| 
 | ||||
| If a prop is nil, the entire element is used." | ||||
|   (delq nil | ||||
|         (-zip-with | ||||
|          (lambda (e1 e2) | ||||
|            (let ((p1 (magithub--zip-case prop1 e1)) | ||||
|                  (p2 (magithub--zip-case prop2 e2))) | ||||
|              (unless (or (and prop1 (not p1)) | ||||
|                          (and prop2 (not p2))) | ||||
|                (cons (if prop1 p1 e1) | ||||
|                      (if prop2 p2 e2))))) | ||||
|          object-list object-list))) | ||||
| 
 | ||||
| (provide 'magithub-core) | ||||
| ;;; magithub-core.el ends here | ||||
| @@ -282,8 +282,14 @@ default." | ||||
| (defun magithub-pull-request-checkout (pull-request) | ||||
|   "Checkout PULL-REQUEST as a local branch." | ||||
|   (interactive (list (magithub-pull-request--completing-read))) | ||||
|   (magithub-with-hub | ||||
|    (magit-checkout (plist-get pull-request :url)))) | ||||
|   (-when-let (url (plist-get pull-request :url)) | ||||
|     (magithub-with-hub | ||||
|      (magit-checkout url)) | ||||
|     (dolist (var-val `(("URL" . ,url) | ||||
|                        ("ID" . ,(plist-get pull-request :number)))) | ||||
|       (magit-set (cdr var-val) | ||||
|                  "branch" (magit-get-current-branch) | ||||
|                  (concat "magithubPullRequest" (car var-val)))))) | ||||
| 
 | ||||
| ;;; Hook into the status buffer | ||||
| (magithub--deftoggle magithub-toggle-issues | ||||
| @@ -1,4 +1,4 @@ | ||||
| (define-package "magithub" "20161013.2008" "Magit interfaces for GitHub" | ||||
| (define-package "magithub" "20161013.2332" "Magit interfaces for GitHub" | ||||
|   '((emacs "24.4") | ||||
|     (magit "2.8.0") | ||||
|     (git-commit "20160821.1338") | ||||
		Reference in New Issue
	
	Block a user