Function: gnus-read-ephemeral-bug-group

gnus-read-ephemeral-bug-group is an interactive and byte-compiled function defined in gnus-group.el.gz.

Signature

(gnus-read-ephemeral-bug-group IDS MBOX-URL &optional WINDOW-CONF)

Documentation

Browse bug reports with IDS in an ephemeral group.

IDS can be either a single bug ID (a number or string), or a list thereof. MBOX-URL is a URL format string identifying the bug tracker; see gnus-bug-group-download-format-alist for details. Interactively, read multiple bug IDS in the minibuffer and default to the MBOX-URL for the Emacs bug tracker. WINDOW-CONF is the name of the Gnus window configuration to use when exiting the ephemeral group.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-group.el.gz
(defun gnus-read-ephemeral-bug-group (ids mbox-url &optional window-conf)
  "Browse bug reports with IDS in an ephemeral group.
IDS can be either a single bug ID (a number or string), or a list
thereof.  MBOX-URL is a URL format string identifying the bug
tracker; see `gnus-bug-group-download-format-alist' for details.
Interactively, read multiple bug IDS in the minibuffer and
default to the MBOX-URL for the Emacs bug tracker.  WINDOW-CONF
is the name of the Gnus window configuration to use when exiting
the ephemeral group."
  (interactive
   (list (gnus-group--read-bug-ids)
         (alist-get 'emacs gnus-bug-group-download-format-alist)))
  (or ids (user-error "No bug IDs specified"))
  (setq ids (mapcar (lambda (id) (format "%s" id))
                    (if (consp ids) ids (list ids))))
  (let ((tmpfile (make-temp-file "gnus-temp-group-")))
    (unwind-protect
	;; Add the debbugs address so that we can respond to reports easily.
        (let* ((address (format "%s@%s" (car ids)
                                (url-host (url-generic-parse-url mbox-url))))
               (address-re (concat "\\(?:\\`\\|[ ,<]\\)"
                                   (regexp-quote address)
                                   "\\(?:\\'\\|[ ,>]\\)"))
               (delim (concat "^" message-unix-mail-delimiter)))
          (let ((coding-system-for-write 'binary)
                (coding-system-for-read 'binary))
            (with-temp-file tmpfile
              (mm-disable-multibyte)
              (dolist (id ids)
                (let ((file (expand-file-name id (locate-user-emacs-file
                                                  "debbugs-cache"))))
                  (if (and (not gnus-plugged)
                           (file-exists-p file))
                      (insert-file-contents file)
                    ;; Pass non-nil VISIT to avoid errors with non-nil
                    ;; `url-automatic-caching' (bug#26063, bug#29008)
                    ;; and immediately unvisit.
                    ;; FIXME: This masks real errors!
                    (url-insert-file-contents (format mbox-url id) t)
                    (setq buffer-file-name nil))))
	      (goto-char (point-min))
              ;; Throw an informative error early instead of passing nonsense
              ;; to `gnus-group-read-ephemeral-group' (bug#36433).
              (unless (save-excursion (re-search-forward delim nil t))
                (error "Invalid mbox format for bug IDs: %s"
                       (string-join ids ", ")))
              (while (re-search-forward delim nil t)
                (narrow-to-region (point)
                                  (if (search-forward "\n\n" nil t)
                                      (1- (point))
                                    (point-max)))
                (unless (string-match-p address-re
                                        (concat (message-fetch-field "to") " "
                                                (message-fetch-field "cc")))
                  (goto-char (point-min))
                  (if (not (re-search-forward "^To:" nil t))
                      (insert "To: " address "\n")
		    (message-next-header)
		    (skip-chars-backward "\t\n ")
                    (insert ", " address)))
                (goto-char (point-max))
                (widen))))
          (gnus-group-read-ephemeral-group
           (concat "nndoc+ephemeral:bug#" (string-join ids ","))
           `(nndoc ,tmpfile
                   (nndoc-article-type mbox))
           nil window-conf))
      (delete-file tmpfile))))