core: add package breakdown in summary message

e: elpa
r: recipe
l: local
b: built-in
This commit is contained in:
syl20bnr 2016-04-03 12:02:28 -04:00
parent 50515a826a
commit 22c2763569
3 changed files with 72 additions and 13 deletions

View File

@ -113,7 +113,7 @@ LAYER has to be installed for this method to work properly."
:initform elpa
:type (satisfies (lambda (x)
(or (stringp x)
(member x '(built-in local site elpa))
(memq x '(built-in local site elpa))
(and (listp x) (eq 'recipe (car x))))))
:documentation "Location of the package.")
(toggle :initarg :toggle
@ -969,9 +969,24 @@ path."
(let ((file (concat (oref layer :dir) file)))
(if (file-exists-p file) (load file)))))
(defun configuration-layer/configured-packages-count ()
"Return the number of configured packages."
(length configuration-layer--packages))
(defun configuration-layer/configured-packages-stats (packages)
"Return a statistics alist regarding the number of configured PACKAGES."
`((total ,(length packages))
(elpa ,(length (configuration-layer/filter-objects
packages (lambda (x)
(eq 'elpa (oref x :location))))))
(recipe ,(length (configuration-layer/filter-objects
packages
(lambda (x)
(let ((location (oref x :location)))
(and (listp location)
(eq 'recipe (car location))))))))
(local ,(length (configuration-layer/filter-objects
packages (lambda (x)
(memq (oref x :location) '(local site))))))
(built-in ,(length (configuration-layer/filter-objects
packages (lambda (x)
(eq 'built-in (oref x :location))))))))
(defun configuration-layer//install-package (pkg)
"Unconditionally install the package PKG."
@ -1160,7 +1175,7 @@ path."
(defun configuration-layer//configure-packages (packages)
"Configure all passed PACKAGES honoring the steps order."
(setq spacemacs-loading-dots-chunk-threshold
(/ (configuration-layer/configured-packages-count)
(/ (length configuration-layer--packages)
spacemacs-loading-dots-chunk-count))
(spacemacs-buffer/message "+ Configuring bootstrap packages...")
(configuration-layer//configure-packages-2
@ -1677,6 +1692,20 @@ to select one."
(configuration-layer//insert-lazy-install-form
layer-name (car x) (cdr x))))))
(defun configuration-layer/display-summary (start-time)
"Display a summary of loading time."
(let ((elapsed (float-time (time-subtract (current-time) emacs-start-time)))
(stats (configuration-layer/configured-packages-stats
configuration-layer--packages)))
(spacemacs-buffer/append
(format "\n%s packages loaded in %.3fs (e:%s r:%s l:%s b:%s)\n"
(cadr (assq 'total stats))
elapsed
(cadr (assq 'elpa stats))
(cadr (assq 'recipe stats))
(cadr (assq 'local stats))
(cadr (assq 'built-in stats))))))
(defun configuration-layer/load-or-install-protected-package
(pkg &optional log file-to-load)
"Load PKG package, and protect it against being deleted as an orphan.

View File

@ -172,14 +172,7 @@ defer call using `spacemacs-post-user-config-hook'."
(when (fboundp dotspacemacs-scratch-mode)
(with-current-buffer "*scratch*"
(funcall dotspacemacs-scratch-mode)))
;; from jwiegley
;; https://github.com/jwiegley/dot-emacs/blob/master/init.el
(let ((elapsed (float-time
(time-subtract (current-time) emacs-start-time))))
(spacemacs-buffer/append
(format "\n[%s packages loaded in %.3fs]\n"
(configuration-layer/configured-packages-count)
elapsed)))
(configuration-layer/display-summary emacs-start-time)
(spacemacs/check-for-new-version spacemacs-version-check-interval))))
(defun spacemacs//describe-system-info-string ()

View File

@ -1237,3 +1237,40 @@
(concat "(configuration-layer/lazy-install 'layer "
":extensions '(\"\\\\(\\\\.ext\\\\'\\\\)\" mode))\n")
(configuration-layer//insert-lazy-install-form 'layer 'mode "\\(\\.ext\\'\\)")))))
;; ---------------------------------------------------------------------------
;; configuration-layer/configured-packages-stats
;; ---------------------------------------------------------------------------
(ert-deftest test-configured-packages-stats--correct-counts ()
(let ((packages
(list (cfgl-package "pkg1" :name 'pkg1 :location 'built-in)
(cfgl-package "pkg2" :name 'pkg2 :location 'built-in)
(cfgl-package "pkg3" :name 'pkg3 :location 'elpa)
(cfgl-package "pkg4" :name 'pkg4 :location 'elpa)
(cfgl-package "pkg5" :name 'pkg5 :location 'elpa)
(cfgl-package "pkg6" :name 'pkg6 :location 'local)
(cfgl-package "pkg7" :name 'pkg7 :location '(recipe :foo bar))
(cfgl-package "pkg8" :name 'pkg8 :location '(recipe :foo bar)))))
(should (equal '((total 8)
(elpa 3)
(recipe 2)
(local 1)
(built-in 2))
(configuration-layer/configured-packages-stats packages)))))
(ert-deftest test-configured-packages-stats--sum-is-correct ()
(let* ((packages
(list (cfgl-package "pkg1" :name 'pkg1 :location 'built-in)
(cfgl-package "pkg2" :name 'pkg2 :location 'built-in)
(cfgl-package "pkg3" :name 'pkg3 :location 'elpa)
(cfgl-package "pkg4" :name 'pkg4 :location 'elpa)
(cfgl-package "pkg5" :name 'pkg5 :location 'elpa)
(cfgl-package "pkg6" :name 'pkg6 :location 'local)
(cfgl-package "pkg7" :name 'pkg7 :location '(recipe :foo bar))
(cfgl-package "pkg8" :name 'pkg8 :location '(recipe :foo bar))))
(stats (configuration-layer/configured-packages-stats packages)))
(should (equal 8 (+ (cadr (assq 'elpa stats))
(cadr (assq 'recipe stats))
(cadr (assq 'local stats))
(cadr (assq 'built-in stats)))))))