]> git.eshelyaron.com Git - emacs.git/commitdiff
(package-activate-all): Be more robust when quickstart fails
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 5 Dec 2023 19:24:45 +0000 (14:24 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 5 Dec 2023 19:24:45 +0000 (14:24 -0500)
Quickstart can fail in all kinds of ways, for example if a package
was removed without updating the quickstart file.

* lisp/emacs-lisp/package.el (package-activate-all): Revert to the slow
path if the quickstart signals an error.
(package--activate-all): Fix compilation warning without an autoload.

lisp/emacs-lisp/package.el

index d4bb6710283435999d6eefea843d422ac99f0324..0a87f771ab9c1f5d0fc7962a989d99d1e33d8830 100644 (file)
@@ -1720,18 +1720,21 @@ The variable `package-load-list' controls which packages to load."
                    package-quickstart-file))))
     ;; The quickstart file presumes that it has a blank slate,
     ;; so don't use it if we already activated some packages.
-    (if (and qs (not (bound-and-true-p package-activated-list)))
-        ;; Skip load-source-file-function which would slow us down by a factor
-        ;; 2 when loading the .el file (this assumes we were careful to
-        ;; save this file so it doesn't need any decoding).
-        (let ((load-source-file-function nil))
-          (unless (boundp 'package-activated-list)
-            (setq package-activated-list nil))
-          (load qs nil 'nomessage))
-      (require 'package)
-      (package--activate-all)))))
+    (or (and qs (not (bound-and-true-p package-activated-list))
+             ;; Skip `load-source-file-function' which would slow us down by
+             ;; a factor 2 when loading the .el file (this assumes we were
+             ;; careful to save this file so it doesn't need any decoding).
+             (with-demoted-errors "Error during quickstart: %S"
+               (let ((load-source-file-function nil))
+                 (unless (boundp 'package-activated-list)
+                   (setq package-activated-list nil))
+                 (load qs nil 'nomessage)
+                 t)))
+        (progn
+          (require 'package)
+          (declare-function package--activate-all "package" ())
+          (package--activate-all))))))
 
-;;;###autoload
 (defun package--activate-all ()
   (dolist (elt (package--alist))
     (condition-case err