Refactor package init process

quelpa is now initialized by doom-initialize-packages.
This commit is contained in:
Henrik Lissner 2018-02-20 17:18:07 -05:00
parent 60e14d01ec
commit b1bf67f630
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 13 additions and 17 deletions

View file

@ -5,6 +5,8 @@
(require 'quelpa) (require 'quelpa)
(require 'async) (require 'async)
(doom-initialize-packages)
;;;###autoload ;;;###autoload
(defun doom-refresh-packages (&optional force-p) (defun doom-refresh-packages (&optional force-p)
"Refresh ELPA packages." "Refresh ELPA packages."
@ -33,9 +35,7 @@
"Get which backend the package NAME was installed with. Can either be elpa or "Get which backend the package NAME was installed with. Can either be elpa or
quelpa. Throws an error if NOERROR is nil and the package isn't installed." quelpa. Throws an error if NOERROR is nil and the package isn't installed."
(cl-assert (symbolp name) t) (cl-assert (symbolp name) t)
(cond ((and (or (quelpa-setup-p) (cond ((assq name quelpa-cache)
(error "Could not initialize quelpa"))
(assq name quelpa-cache))
'quelpa) 'quelpa)
((assq name package-alist) ((assq name package-alist)
'elpa) 'elpa)
@ -50,7 +50,6 @@ quelpa. Throws an error if NOERROR is nil and the package isn't installed."
list, whose car is NAME, and cdr the current version list and latest version list, whose car is NAME, and cdr the current version list and latest version
list of the package." list of the package."
(cl-assert (symbolp name) t) (cl-assert (symbolp name) t)
(doom-initialize-packages)
(when-let* ((desc (cadr (assq name package-alist)))) (when-let* ((desc (cadr (assq name package-alist))))
(let* ((old-version (package-desc-version desc)) (let* ((old-version (package-desc-version desc))
(new-version (new-version
@ -76,15 +75,13 @@ list of the package."
"Return PROPerty in NAME's plist." "Return PROPerty in NAME's plist."
(cl-assert (symbolp name) t) (cl-assert (symbolp name) t)
(cl-assert (keywordp prop) t) (cl-assert (keywordp prop) t)
(doom-initialize-packages)
(plist-get (cdr (assq name doom-packages)) prop)) (plist-get (cdr (assq name doom-packages)) prop))
;;;###autoload ;;;###autoload
(defun doom-package-different-backend-p (name) (defun doom-package-different-backend-p (name)
"Return t if NAME (a package's symbol) has a new backend than what it was "Return t if a package named NAME (a symbol) has a new backend than what it
installed with. Returns nil otherwise, or if package isn't installed." was installed with. Returns nil otherwise, or if package isn't installed."
(cl-assert (symbolp name) t) (cl-assert (symbolp name) t)
(doom-initialize-packages)
(and (package-installed-p name) (and (package-installed-p name)
(let* ((plist (cdr (assq name doom-packages))) (let* ((plist (cdr (assq name doom-packages)))
(old-backend (doom-package-backend name 'noerror)) (old-backend (doom-package-backend name 'noerror))
@ -194,6 +191,7 @@ If INCLUDE-IGNORED-P is non-nil, includes missing packages that are ignored,
i.e. they have an :ignore property. i.e. they have an :ignore property.
Used by `doom//packages-install'." Used by `doom//packages-install'."
(doom-initialize-packages t)
(cl-loop for desc in (doom-get-packages) (cl-loop for desc in (doom-get-packages)
for (name . plist) = desc for (name . plist) = desc
if (and (or include-ignored-p if (and (or include-ignored-p
@ -209,7 +207,6 @@ Used by `doom//packages-install'."
"Update `quelpa-cache' upon a successful `package-delete'." "Update `quelpa-cache' upon a successful `package-delete'."
(let ((name (package-desc-name desc))) (let ((name (package-desc-name desc)))
(when (and (not (package-installed-p name)) (when (and (not (package-installed-p name))
(quelpa-setup-p)
(assq name quelpa-cache)) (assq name quelpa-cache))
(map-delete quelpa-cache name) (map-delete quelpa-cache name)
(quelpa-save-cache) (quelpa-save-cache)
@ -284,8 +281,6 @@ package.el as appropriate."
(desc (cadr (assq name package-alist)))) (desc (cadr (assq name package-alist))))
(pcase (doom-package-backend name) (pcase (doom-package-backend name)
('quelpa ('quelpa
(or (quelpa-setup-p)
(error "Failed to initialize quelpa"))
(let ((quelpa-upgrade-p t)) (let ((quelpa-upgrade-p t))
(quelpa (assq name quelpa-cache)))) (quelpa (assq name quelpa-cache))))
('elpa ('elpa
@ -307,8 +302,6 @@ package.el as appropriate."
(user-error "%s isn't installed" name)) (user-error "%s isn't installed" name))
(let ((inhibit-message (not doom-debug-mode)) (let ((inhibit-message (not doom-debug-mode))
quelpa-p) quelpa-p)
(unless (quelpa-setup-p)
(error "Could not initialize QUELPA"))
(when (assq name quelpa-cache) (when (assq name quelpa-cache)
(map-delete quelpa-cache name) (map-delete quelpa-cache name)
(quelpa-save-cache) (quelpa-save-cache)

View file

@ -181,9 +181,9 @@ it anyway."
(quiet! (doom//reload-autoloads)))) (quiet! (doom//reload-autoloads))))
(defun doom-initialize-packages (&optional force-p load-p) (defun doom-initialize-packages (&optional force-p load-p)
"Crawls across your emacs.d to fill `doom-modules' (from init.el) and "Crawls across your emacs.d to fill `doom-modules' (from init.el),
`doom-packages' (from packages.el files), if they aren't set already. Also runs `doom-packages' (from packages.el files) and `quelpa-cache'. If they aren't set
every enabled module's init.el. already. Also runs every enabled module's init.el.
If FORCE-P is non-nil, do it even if they are. If FORCE-P is non-nil, do it even if they are.
@ -212,7 +212,10 @@ This aggressively reloads core autoload files."
(mapc #'_load (file-expand-wildcards (expand-file-name "autoload/*.el" doom-core-dir))) (mapc #'_load (file-expand-wildcards (expand-file-name "autoload/*.el" doom-core-dir)))
(_load (expand-file-name "init.el" doom-emacs-dir) nil 'interactive))) (_load (expand-file-name "init.el" doom-emacs-dir) nil 'interactive)))
(when (or force-p (not doom-packages)) (when (or force-p (not doom-packages))
(setq doom-packages nil) (require 'quelpa)
(setq doom-packages nil
quelpa-initialized-p nil)
(quelpa-setup-p)
(_load (expand-file-name "packages.el" doom-core-dir)) (_load (expand-file-name "packages.el" doom-core-dir))
(cl-loop for key being the hash-keys of doom-modules (cl-loop for key being the hash-keys of doom-modules
if (doom-module-path (car key) (cdr key) "packages.el") if (doom-module-path (car key) (cdr key) "packages.el")