[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/debbugs 20cf154 160/311: Retrieve bugs asynchronously
From: |
Stefan Monnier |
Subject: |
[elpa] externals/debbugs 20cf154 160/311: Retrieve bugs asynchronously |
Date: |
Sun, 29 Nov 2020 18:42:02 -0500 (EST) |
branch: externals/debbugs
commit 20cf15432efa0438dbc723b7a4e9f921b7812e4e
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>
Retrieve bugs asynchronously
* packages/debbugs/debbugs-gnu.el (top): Require `async'.
(debbugs-gnu-show-reports): Call `debbugs-get-status' asynchronously.
---
debbugs-gnu.el | 198 +++++++++++++++++++++++++++++----------------------------
1 file changed, 102 insertions(+), 96 deletions(-)
diff --git a/debbugs-gnu.el b/debbugs-gnu.el
index eba1f75..e2607a2 100644
--- a/debbugs-gnu.el
+++ b/debbugs-gnu.el
@@ -6,6 +6,7 @@
;; Michael Albinus <michael.albinus@gmx.org>
;; Keywords: comm, hypermedia, maint
;; Package: debbugs
+;; Package-Requires: ((async))
;; Version: 0.8
;; This file is not part of GNU Emacs.
@@ -143,6 +144,7 @@
(require 'tabulated-list)
(require 'add-log)
(require 'subr-x)
+(require 'async)
(eval-when-compile (require 'cl))
(autoload 'article-decode-charset "gnus-art")
@@ -575,7 +577,7 @@ marked as \"client-side filter\"."
(let ((inhibit-read-only t)
(debbugs-port "gnu.org")
(buffer-name "*Emacs Bugs*")
- all-status)
+ all-proc)
;; The tabulated mode sets several local variables. We must get
;; rid of them.
(when (get-buffer buffer-name)
@@ -590,102 +592,107 @@ marked as \"client-side filter\"."
(while bug-ids
(setq curr-ids (butlast bug-ids (- (length bug-ids) hits))
bug-ids (last bug-ids (- (length bug-ids) hits))
- all-status
- (append all-status (apply 'debbugs-get-status curr-ids)))))
+ all-proc
+ (append all-proc
+ (list
+ (async-start
+ `(lambda ()
+ (load ,(locate-library "debbugs"))
+ (apply 'debbugs-get-status ',curr-ids))))))))
;; Print bug reports.
- ;; TODO: Do it asynchronously, in parallel to retrieving next chunk
- ;; of bug statuses.
- (dolist (status all-status)
- (let* ((id (cdr (assq 'id status)))
- (words
- (mapconcat
- 'identity
- (cons (cdr (assq 'severity status))
- (cdr (assq 'keywords status)))
- ","))
- (address (mail-header-parse-address
- (decode-coding-string (cdr (assq 'originator status))
- 'utf-8)))
- (owner (if (cdr (assq 'owner status))
- (car (mail-header-parse-address
- (decode-coding-string (cdr (assq 'owner status))
- 'utf-8)))))
- (subject (decode-coding-string (cdr (assq 'subject status))
- 'utf-8))
- merged)
- (unless (equal (cdr (assq 'pending status)) "pending")
- (setq words
- (concat words "," (cdr (assq 'pending status)))))
- (let ((packages (delete "emacs" (cdr (assq 'package status)))))
- (when packages
- (setq words (concat words "," (mapconcat 'identity packages ",")))))
- (when (setq merged (cdr (assq 'mergedwith status)))
- (setq words (format "%s,%s"
- (if (numberp merged)
- merged
- (mapconcat 'number-to-string merged ","))
- words)))
- (when (or (not merged)
- (not (let ((found nil))
- (dolist (id (if (listp merged)
- merged
- (list merged)))
- (dolist (entry tabulated-list-entries)
- (when (equal id (cdr (assq 'id (car entry))))
- (setq found t))))
- found)))
- (add-to-list
- 'tabulated-list-entries
- (list
- status
- (vector
- (propertize
- (format "%5d" id)
- 'face
- ;; Mark tagged bugs.
- (if (memq id debbugs-gnu-local-tags)
- 'debbugs-gnu-tagged
- 'default))
- (propertize
- ;; Mark status and age.
- words
- 'face
- (cond
- ((cdr (assq 'archived status))
- 'debbugs-gnu-archived)
- ((equal (cdr (assq 'pending status)) "done")
- 'debbugs-gnu-done)
- ((member "pending" (cdr (assq 'keywords status)))
- 'debbugs-gnu-pending)
- ((= (cdr (assq 'date status))
- (cdr (assq 'log_modified status)))
- 'debbugs-gnu-new)
- ((< (- (float-time)
- (cdr (assq 'log_modified status)))
- (* 60 60 24 7 2))
- 'debbugs-gnu-handled)
- (t
- 'debbugs-gnu-stale)))
- (propertize
- ;; Prefer the name over the address.
- (or (cdr address)
- (car address))
- 'face
- ;; Mark own submitted bugs.
- (if (and (stringp (car address))
- (string-equal (car address) user-mail-address))
- 'debbugs-gnu-tagged
- 'default))
- (propertize
- subject
- 'face
- ;; Mark owned bugs.
- (if (and (stringp owner)
- (string-equal owner user-mail-address))
- 'debbugs-gnu-tagged
- 'default))))
- 'append))))
+ (dolist (proc all-proc)
+ (dolist (status (async-get proc))
+ (let* ((id (cdr (assq 'id status)))
+ (words
+ (mapconcat
+ 'identity
+ (cons (cdr (assq 'severity status))
+ (cdr (assq 'keywords status)))
+ ","))
+ (address (mail-header-parse-address
+ (decode-coding-string (cdr (assq 'originator status))
+ 'utf-8)))
+ (owner (if (cdr (assq 'owner status))
+ (car (mail-header-parse-address
+ (decode-coding-string (cdr (assq 'owner status))
+ 'utf-8)))))
+ (subject (decode-coding-string (cdr (assq 'subject status))
+ 'utf-8))
+ merged)
+ (unless (equal (cdr (assq 'pending status)) "pending")
+ (setq words (concat words "," (cdr (assq 'pending status)))))
+ (let ((packages (delete "emacs" (cdr (assq 'package status)))))
+ (when packages
+ (setq words
+ (concat words "," (mapconcat 'identity packages ",")))))
+ (when (setq merged (cdr (assq 'mergedwith status)))
+ (setq words (format "%s,%s"
+ (if (numberp merged)
+ merged
+ (mapconcat 'number-to-string merged ","))
+ words)))
+ (when (or (not merged)
+ (not (let ((found nil))
+ (dolist (id (if (listp merged)
+ merged
+ (list merged)))
+ (dolist (entry tabulated-list-entries)
+ (when (equal id (cdr (assq 'id (car entry))))
+ (setq found t))))
+ found)))
+ (add-to-list
+ 'tabulated-list-entries
+ (list
+ status
+ (vector
+ (propertize
+ (format "%5d" id)
+ 'face
+ ;; Mark tagged bugs.
+ (if (memq id debbugs-gnu-local-tags)
+ 'debbugs-gnu-tagged
+ 'default))
+ (propertize
+ ;; Mark status and age.
+ words
+ 'face
+ (cond
+ ((cdr (assq 'archived status))
+ 'debbugs-gnu-archived)
+ ((equal (cdr (assq 'pending status)) "done")
+ 'debbugs-gnu-done)
+ ((member "pending" (cdr (assq 'keywords status)))
+ 'debbugs-gnu-pending)
+ ((= (cdr (assq 'date status))
+ (cdr (assq 'log_modified status)))
+ 'debbugs-gnu-new)
+ ((< (- (float-time)
+ (cdr (assq 'log_modified status)))
+ (* 60 60 24 7 2))
+ 'debbugs-gnu-handled)
+ (t
+ 'debbugs-gnu-stale)))
+ (propertize
+ ;; Prefer the name over the address.
+ (or (cdr address)
+ (car address))
+ 'face
+ ;; Mark own submitted bugs.
+ (if (and (stringp (car address))
+ (string-equal (car address) user-mail-address))
+ 'debbugs-gnu-tagged
+ 'default))
+ (propertize
+ subject
+ 'face
+ ;; Mark owned bugs.
+ (if (and (stringp owner)
+ (string-equal owner user-mail-address))
+ 'debbugs-gnu-tagged
+ 'default))))
+ 'append)))))
+
(tabulated-list-init-header)
(tabulated-list-print)
@@ -783,7 +790,6 @@ Used instead of `tabulated-list-print-entry'."
(defun debbugs-gnu-rescan ()
"Rescan the current set of bug reports."
(interactive)
-
;; Refresh the buffer. `save-excursion' does not work, so we
;; remember the position.
(let ((pos (point)))
- [elpa] externals/debbugs c9989ec 133/311: New manual debbugs-ug.texi, (continued)
- [elpa] externals/debbugs c9989ec 133/311: New manual debbugs-ug.texi, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 9ba8dcc 139/311: Minor improvements to debbugs-reference.el, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 8de636e 140/311: Rename debbugs-reference.el to debbugs-browse.el, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 4c9f22b 148/311: Command to list blocking reports, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs f4bc079 151/311: * debbugs-gnu.el (debbugs-gnu-narrow-to-status): Make narrowing to the severity work., Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 6d52539 143/311: Support reading debbugs email exchange with Rmail, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 02fa6d4 144/311: Version: bump to 0.8 in debbugs files, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 23786a1 146/311: * debbugs-gnu.el (debbugs-gnu-select-report): Don't bug out on the, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs ea69942 155/311: Allow patching from non-MIME articles, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 78ad396 157/311: Further tweaks to the patch fixer-upper (for a/erc.el), Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 20cf154 160/311: Retrieve bugs asynchronously,
Stefan Monnier <=
- [elpa] externals/debbugs bd894ed 161/311: Move asynchronous calls in debbugs to SOAP function level., Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 82ea47b 164/311: Consolidation in debbugs, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs d0e991e 165/311: Cache and reuse bug entries in debbugs, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 9a8e852 168/311: Fix missing mail-header-separator, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs a3f6bb8 169/311: * debbugs-gnu.el (debbugs-gnu-apply-patch): Really do QP decoding., Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 938a990 175/311: Allow sending control messages offline, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 10f5c39 177/311: Add a command to save the bugs list, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs ff02eb7 123/311: * debbugs/debbugs-gnu.el (debbugs-gnu-default-packages): Add auctex, mh-e., Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 8f1d62a 141/311: Upgrade debbugs to 0.7, Stefan Monnier, 2020/11/29
- [elpa] externals/debbugs 313b653 142/311: Some minor changes in debbugs, Stefan Monnier, 2020/11/29