GNU bug report logs - #19390
25.0.50; `package-activate' is too slow

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dgutov <at> yandex.ru>

Date: Mon, 15 Dec 2014 17:36:01 UTC

Severity: normal

Found in version 25.0.50

Done: Dmitry Gutov <dgutov <at> yandex.ru>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: 19390 <at> debbugs.gnu.org
Subject: bug#19390: Acknowledgement (25.0.50; `package-activate' is too slow)
Date: Tue, 16 Dec 2014 02:41:58 +0200
Here's one possible fix. We don't deal with the slowness of 
`package--list-loaded-files' at all, and instead only load them if 
`package-activate' had been called with non-nil second argument (which 
only happens now if the package is installed).

This also changes the way `package-activate' calls itself recursively on 
dependencies: instead of always passing the version as the second 
argument, pass the same value of FORCE it's been called with. Passing 
the version seems to be a remnant of older code.


diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index cd948ae..394efc3 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -516,7 +516,7 @@ Return the max version (as a string) if the package 
is held at a lower version."
              force))
           (t (error "Invalid element in `package-load-list'")))))

-(defun package-activate-1 (pkg-desc)
+(defun package-activate-1 (pkg-desc &optional force)
   (let* ((name (package-desc-name pkg-desc))
 	 (pkg-dir (package-desc-dir pkg-desc))
          (pkg-dir-dir (file-name-as-directory pkg-dir)))
@@ -527,7 +527,7 @@ Return the max version (as a string) if the package 
is held at a lower version."
     (let* ((old-lp load-path)
            (autoloads-file (expand-file-name
                             (format "%s-autoloads" name) pkg-dir))
-           (loaded-files-list (package--list-loaded-files pkg-dir)))
+           (loaded-files-list (and force (package--list-loaded-files 
pkg-dir))))
       (with-demoted-errors (format "Error loading %s: %%s" name)
         (load autoloads-file nil t))
       (when (and (eq old-lp load-path)
@@ -636,14 +636,14 @@ If FORCE is true, (re-)activate it if it's already 
activated."
              (fail (catch 'dep-failure
                      ;; Activate its dependencies recursively.
                      (dolist (req (package-desc-reqs pkg-vec))
-                       (unless (package-activate (car req) (cadr req))
+                       (unless (package-activate (car req) force)
                          (throw 'dep-failure req))))))
 	(if fail
 	    (warn "Unable to activate package `%s'.
 Required package `%s-%s' is unavailable"
 		  package (car fail) (package-version-join (cadr fail)))
 	  ;; If all goes well, activate the package itself.
-	  (package-activate-1 pkg-vec)))))))
+	  (package-activate-1 pkg-vec force)))))))

 (defun define-package (_name-string _version-string
                                     &optional _docstring _requirements







This bug report was last modified 10 years and 236 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.