core-packages: rewrite doom/packages-update

This commit is contained in:
Henrik Lissner 2017-01-31 19:43:44 -05:00
parent 468b66108d
commit 1d9202b7ba

View file

@ -210,7 +210,8 @@ date."
(f-expand (symbol-name package) quelpa-build-dir)))) (f-expand (symbol-name package) quelpa-build-dir))))
(or (and ver (version-to-list ver)) cur-version)) (or (and ver (version-to-list ver)) cur-version))
(package-desc-version (cadr (assq package package-archive-contents))))) (package-desc-version (cadr (assq package package-archive-contents)))))
(not (version-list-<= new-version cur-version)))))) (unless (version-list-<= new-version cur-version)
(cons cur-version new-version))))))
(defun doom/packages-reload () (defun doom/packages-reload ()
"Reload `load-path' by scanning all packages. Run this if you ran make update "Reload `load-path' by scanning all packages. Run this if you ran make update
@ -230,58 +231,50 @@ or make clean outside of Emacs."
"Update outdated packages. This includes quelpa-installed packages and ELPA "Update outdated packages. This includes quelpa-installed packages and ELPA
packages. This will delete old versions of packages as well." packages. This will delete old versions of packages as well."
(interactive) (interactive)
(message "Refreshing packages...")
(package-initialize)
(package-refresh-contents) (package-refresh-contents)
(package-read-all-archive-contents) (if (not package-alist)
;; first, upgrade quelpa + quelpa-installed packages (message "No packages are installed")
(require 'quelpa) (require 'quelpa)
(let ((n 0)
(err 0)
(quelpa-upgrade-p t)
quelpa-verbose)
(when (quelpa-setup-p) (when (quelpa-setup-p)
(setq quelpa-cache (--filter (package-installed-p (car it)) quelpa-cache)) (setq quelpa-cache (--filter (package-installed-p (car it)) quelpa-cache)))
(dolist (package quelpa-cache) (let* ((err 0)
(condition-case ex (quelpa-packages (-map 'car quelpa-cache))
(let ((old-version (ignore-errors (elpa-packages (-difference (package--find-non-dependencies) quelpa-packages))
(package-desc-version outdated-packages)
(cadr (or (assq (car package) package-alist) (dolist (pkg (append quelpa-packages elpa-packages))
(assq (car package) package--builtins)))))) (-when-let (ver (doom-package-outdated-p pkg))
new-version) (push (list pkg ver) outdated-packages)))
(when (doom-package-outdated-p (car package)) (cond ((not outdated-packages)
(setq n (1+ n)) (message "Everything is up-to-date"))
(let ((inhibit-message t)) ((not (y-or-n-p
(quelpa package)) (format "%s packages will be updated:\n%s\n\nProceed?"
(setq new-version (package-desc-version (length outdated-packages)
(cadr (or (assq (car package) package-alist) (mapconcat (lambda (pkg) (format "%s: %s -> %s"
(assq (car package) package--builtins))))) (car pkg)
(when noninteractive (car (cdr pkg))
(message "Updating %s (%s -> %s) (quelpa)" (car package) (cdr (cdr pkg))))
(mapconcat 'number-to-string old-version ".") outdated-packages ", "))))
(mapconcat 'number-to-string new-version "."))))) (message "Aborted"))
('error (t
(setq err (1+ err)) (dolist (pkg outdated-packages)
(message "ERROR (quelpa): %s" ex))))) (condition-case ex
;; ...then update elpa packages (cond ((assq pkg quelpa-outdated-packages)
(mapc (lambda (package) (let ((inhibit-message t))
(when noninteractive (message "Updating %s (elpa)" package)) (quelpa package)))
(condition-case ex ((memq pkg elpa-outdated-packages)
(let ((desc (cadr (assq package package-alist))) (let ((desc (cadr (assq pkg package-alist)))
(archive (cadr (assoc package package-archive-contents)))) (archive (cadr (assoc pkg package-archive-contents))))
(setq n (1+ n)) (package-install-from-archive archive)
(package-install-from-archive archive) (delete-directory (package-desc-dir desc) t)))
(delete-directory (package-desc-dir desc) t)) (t (error "Not a valid package")))
('error ('error
(setq err (1+ err)) (setq err (1+ err))
(message "ERROR (elpa): %s" ex)))) ;; TODO real error string (message "ERROR (%s): %s" pkg ex))))))
(-uniq (--filter (and (not (assq it quelpa-cache)) (if (> err 0)
(doom-package-outdated-p it)) (message "Done, but with %s errors" err)
(package--find-non-dependencies)))) (message "Done")))))
(when noninteractive
(message (if (= n 0)
"Everything is up-to-date"
"Updated %s packages") n)
(when (> err 0)
(message "There were %s errors" err)))))
(defun doom/packages-clean () (defun doom/packages-clean ()
"Delete packages that are no longer used or depended on." "Delete packages that are no longer used or depended on."