[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/package+vc 7c11398ca0 5/5: Add a generic bug reporting command f
From: |
Philip Kaludercic |
Subject: |
feature/package+vc 7c11398ca0 5/5: Add a generic bug reporting command for packages |
Date: |
Fri, 7 Oct 2022 07:43:37 -0400 (EDT) |
branch: feature/package+vc
commit 7c11398ca0a77eaf97448f0760800d6ec05fe22c
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>
Add a generic bug reporting command for packages
* lisp/emacs-lisp/package.el (package-menu-mode-map): Bind
'package-report-bug'.
(package-report-bug): Add new command.
---
lisp/emacs-lisp/package.el | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 2de5056475..e0fb4b0572 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2964,6 +2964,7 @@ either a full name or nil, and EMAIL is a valid email
address."
"~" #'package-menu-mark-obsolete-for-deletion
"w" #'package-browse-url
"m" #'package-contact-maintainer
+ "b" #'package-report-bug
"x" #'package-menu-execute
"h" #'package-menu-quick-help
"H" #'package-menu-hide-package
@@ -4516,6 +4517,37 @@ DESC must be a `package-desc' object."
(string-trim (substring-no-properties (buffer-string))))
(format "[%s] %s" name subject))))
+(defun package-report-bug (desc)
+ "Prepare a message to send to the maintainers of a package.
+DESC must be a `package-desc' object."
+ (interactive (list (package--query-desc package-alist))
+ package-menu-mode)
+ (unless desc
+ (user-error "Package must be non-nil"))
+ (let* ((extras (package-desc-extras desc))
+ (maint (alist-get :maintainer extras))
+ vars)
+ (unless maint
+ (user-error "Package %s has no explicit maintainer"
+ (package-desc-name desc)))
+ (let ((check (apply-partially #'file-equal-p (package-desc-dir desc))))
+ (dolist-with-progress-reporter (group custom-current-group-alist)
+ "Scanning for modified user options..."
+ (dolist (ent (get (cdr group) 'custom-group))
+ (when (and (custom-variable-p (car ent))
+ (boundp (car ent))
+ (not (eq (custom--standard-value (car ent))
+ (default-toplevel-value (car ent))))
+ (locate-dominating-file (car group) check))
+ (push (car ent) vars)))))
+ (dlet ((reporter-prompt-for-summary-p t))
+ (reporter-submit-bug-report
+ (with-temp-buffer
+ (package--print-email-button maint)
+ (string-trim (substring-no-properties (buffer-string))))
+ (symbol-name (package-desc-name desc))
+ vars))))
+
;;;; Introspection
(defun package-get-descriptor (pkg-name)