From 22c2763569c30eeb0d1f220807b7267dc7b4c783 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sun, 3 Apr 2016 12:02:28 -0400 Subject: [PATCH] core: add package breakdown in summary message e: elpa r: recipe l: local b: built-in --- core/core-configuration-layer.el | 39 +++++++++++++++++--- core/core-spacemacs.el | 9 +---- tests/core/core-configuration-layer-utest.el | 37 +++++++++++++++++++ 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/core/core-configuration-layer.el b/core/core-configuration-layer.el index 190b4025c..ecdeffffd 100644 --- a/core/core-configuration-layer.el +++ b/core/core-configuration-layer.el @@ -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. diff --git a/core/core-spacemacs.el b/core/core-spacemacs.el index 87e9a545b..4d8b183f9 100644 --- a/core/core-spacemacs.el +++ b/core/core-spacemacs.el @@ -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 () diff --git a/tests/core/core-configuration-layer-utest.el b/tests/core/core-configuration-layer-utest.el index f081d143f..33c5af23a 100644 --- a/tests/core/core-configuration-layer-utest.el +++ b/tests/core/core-configuration-layer-utest.el @@ -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)))))))