Refactor doom-refresh-packages (and make it async)

This commit is contained in:
Henrik Lissner 2017-05-27 18:29:32 +02:00
parent fbe782df22
commit 29091c40ad

View file

@ -7,15 +7,20 @@
(defun doom-refresh-packages (&optional force-p) (defun doom-refresh-packages (&optional force-p)
"Refresh ELPA packages." "Refresh ELPA packages."
(doom-initialize) (doom-initialize)
(when (or force-p (getenv "DEBUG")) (when force-p
(doom-refresh-clear-cache)) (doom-refresh-clear-cache))
(unless (persistent-soft-fetch 'last-pkg-refresh "emacs") (unless (persistent-soft-fetch 'last-pkg-refresh "emacs")
(condition-case ex (condition-case ex
(progn (progn
(package-refresh-contents) (message "Refreshing package archives")
(persistent-soft-store 'last-pkg-refresh t "emacs" 900)) (package-refresh-contents (not doom-debug-mode))
('error (let ((i 0))
(doom-refresh-clear-cache))))) (while package--downloads-in-progress
(sleep-for 0 250))
(persistent-soft-store 'last-pkg-refresh t "emacs" 900)))
(error
(doom-refresh-clear-cache)
(message "Failed to refresh packages: %s" (cadr ex))))))
;;;###autoload ;;;###autoload
(defun doom-refresh-clear-cache () (defun doom-refresh-clear-cache ()
@ -57,7 +62,6 @@ list of the package."
(version-to-list ver) (version-to-list ver)
old-version))) old-version)))
('elpa ('elpa
(doom-refresh-packages)
(let ((desc (cadr (assq name package-archive-contents)))) (let ((desc (cadr (assq name package-archive-contents))))
(when (package-desc-p desc) (when (package-desc-p desc)
(package-desc-version desc))))))) (package-desc-version desc)))))))
@ -169,7 +173,7 @@ Used by `doom/packages-install'."
('file-error ('file-error
(message! (bold (red " FILE ERROR: %s" ex2))) (message! (bold (red " FILE ERROR: %s" ex2)))
(message! " Trying again...") (message! " Trying again...")
(doom-refresh-packages) (doom-refresh-packages t)
,@body)) ,@body))
('user-error ('user-error
(message! (bold (red " ERROR: %s" ex)))) (message! (bold (red " ERROR: %s" ex))))
@ -194,7 +198,6 @@ Used by `doom/packages-install'."
(defun doom-install-package (name &optional plist) (defun doom-install-package (name &optional plist)
"Installs package NAME with optional quelpa RECIPE (see `quelpa-recipe' for an "Installs package NAME with optional quelpa RECIPE (see `quelpa-recipe' for an
example; the package name can be omitted)." example; the package name can be omitted)."
(doom-refresh-packages)
(doom-initialize-packages) (doom-initialize-packages)
(when (package-installed-p name) (when (package-installed-p name)
(user-error "%s is already installed, skipping" name)) (user-error "%s is already installed, skipping" name))
@ -268,7 +271,7 @@ appropriate."
(message! (yellow "Aborted!"))) (message! (yellow "Aborted!")))
(t (t
(doom-refresh-packages) (doom-refresh-packages doom-debug-mode)
(dolist (pkg packages) (dolist (pkg packages)
(message! "Installing %s" (car pkg)) (message! "Installing %s" (car pkg))
(doom--condition-case! (doom--condition-case!
@ -290,7 +293,7 @@ appropriate."
(defun doom/packages-update () (defun doom/packages-update ()
"Interactive command for updating packages." "Interactive command for updating packages."
(interactive) (interactive)
(doom-refresh-packages) (doom-refresh-packages doom-debug-mode)
(let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha))) (let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha)))
(cond ((not packages) (cond ((not packages)
(message! (green "Everything is up-to-date"))) (message! (green "Everything is up-to-date")))