*** /tmp/ediffR9vehu 2020-08-24 18:00:11.883133992 +0200 --- /home/albinus/src/emacs-27/admin/admin.el 2020-08-24 17:56:38.271440689 +0200 *************** *** 921,926 **** --- 921,978 ---- 'help-echo "Mouse-2: visit this definition" :type 'cusver-xref))))))) + + ;; Reminder message for open release-critical bugs. This requires the + ;; GNU ELPA package `debbugs'. + + (defun reminder-for-release-critical-bugs (version) + "Submit a reminder message for release critical bugs of Emacs VERSION." + (interactive + (list (read-string "Version number: " + (pcase (nbutlast (version-to-list emacs-version) + ;; Chop off build number, if needed. + (if (boundp 'emacs-build-number) + 0 1)) + (`(,major ,minor ,_micro) ; Development version. + (format "%d.%d" major (1+ minor))) + (`(,major ,minor) ; Release version. + (format "%d.%d" major minor)) + ;; Unexpected version format? + (_ emacs-version))))) + + (require 'reporter) + (require 'debbugs-gnu) + + (when-let ((id (alist-get version debbugs-gnu-emacs-blocking-reports + nil nil #'string-equal)) + (status-id (debbugs-get-status id)) + (blockedby-ids (debbugs-get-attribute (car status-id) 'blockedby)) + (blockedby-status + (apply #'debbugs-get-status (sort blockedby-ids #'<)))) + + (reporter-submit-bug-report + "" ; to-address + nil nil nil + (lambda () ; posthook + (goto-char (point-min)) + (mail-position-on-field "subject") + (insert (format "Release-critical bugs for Emacs %s" version)) + (mail-text) + (delete-region (point) (point-max)) + (insert " + The following bugs are regarded as release-critical for Emacs " version ". + People are encouraged to work on them with priority.\n\n") + (dolist (_ blockedby-status) + (unless (equal (debbugs-get-attribute _ 'pending) "done") + (insert (format "bug#%d %s\n" + (debbugs-get-attribute _ 'id) + (debbugs-get-attribute _ 'subject))))) + (insert " + If you use the debbugs package from GNU ELPA, you can apply the + following form to see all bugs which block a given release: + + (debbugs-gnu-emacs-release-blocking-reports \"" version "\")\n"))))) + (provide 'admin) ;;; admin.el ends here