]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent accidentally unregistering packages
authorGerd Möllmann <gerd@gnu.org>
Tue, 25 Oct 2022 12:04:36 +0000 (14:04 +0200)
committerGerd Möllmann <gerd@gnu.org>
Tue, 25 Oct 2022 12:04:36 +0000 (14:04 +0200)
* lisp/emacs-lisp/pkg.el (pkg--remove-from-registry): Check
for package being eq to a registered package.

lisp/emacs-lisp/pkg.el

index 47317fdf53248e6e3efddd7a1f9221a3d74775c8..56c191f7d08572e991d75fdfb0c8b83e8c64543c 100644 (file)
@@ -161,11 +161,18 @@ Otherwise, NAME must be the name of a registered package."
   (mapc (lambda (name) (puthash name package *package-registry*))
         (package-%nicknames package)))
 
-(defun pkg--remove-from-registry (package)
+(cl-defun pkg--remove-from-registry (package)
   "Remove PACKAGE from the package registry."
-  (remhash (package-%name package) *package-registry*)
-  (mapc (lambda (name) (remhash name *package-registry*))
-        (package-%nicknames package)))
+  ;; Note that an unregistered package might have the same name or
+  ;; nickname as a registered package.  Prevent deleting such a
+  ;; package from unregistering some other package.
+  (let ((names ()))
+    (maphash (lambda (n p)
+               (when (eq p package)
+                 (push n names)))
+             *package-registry*)
+    (dolist (n names)
+      (remhash n *package-registry*))))
 
 (defun pkg--package-or-default (package)
   "Return the package object denoted by PACKAGE.