From f7668181d6069cf527ac8ea27e4596d81d57dedc Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Mon, 5 Sep 2016 11:54:29 -0400 Subject: [PATCH] core: refactor make-package and make-packages Rename configuration-layers/make-packages to configuration-layers/make-packages-from-layers Move all package initialization logic to configuration-layers/make-package instead of having it split between make-packages and make-package. --- core/core-configuration-layer.el | 164 +++--- tests/core/core-configuration-layer-utest.el | 539 +++++++++++-------- 2 files changed, 400 insertions(+), 303 deletions(-) diff --git a/core/core-configuration-layer.el b/core/core-configuration-layer.el index 015cf265e..e062e5940 100644 --- a/core/core-configuration-layer.el +++ b/core/core-configuration-layer.el @@ -224,9 +224,6 @@ LAYER has to be installed for this method to work properly." (defvar configuration-layer--indexed-layers (make-hash-table :size 1024) "Hash map to index `cfgl-layer' objects by their names.") -(defvar configuration-layer--delayed-layers '() - "A list of layer names to check again after first pass of package loading.") - (defvar configuration-layer--used-packages '() "An alphabetically sorted list of used package names.") @@ -400,7 +397,7 @@ If NO-INSTALL is non nil then install steps are skipped." (configuration-layer/declare-layer layer) (let* ((obj (configuration-layer/get-layer layer)) (pkgs (when obj (oref obj :packages)))) - (configuration-layer/make-packages (list layer)) + (configuration-layer/make-packages-from-layers (list layer)) (dolist (pkg pkgs) (let ((pkg-name (if (listp pkg) (car pkg) pkg))) (add-to-list 'all-other-packages pkg-name)))))) @@ -538,45 +535,91 @@ indexed layers for the path." (oset obj :selected-packages selected-packages)) obj)))) -(defun configuration-layer/make-package (pkg &optional obj togglep layer) +(defun configuration-layer/make-package (pkg layer-name &optional obj) "Return a `cfgl-package' object based on PKG. If OBJ is non nil then copy PKG properties into OBJ, otherwise create a new object. Properties that can be copied are `:location', `:step' and `:excluded'. If TOGGLEP is nil then `:toggle' parameter is ignored." - (let* ((name-sym (if (listp pkg) (car pkg) pkg)) - (name-str (symbol-name name-sym)) - (location (when (listp pkg) (plist-get (cdr pkg) :location))) + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (pkg-name-str (symbol-name pkg-name)) + (layer (unless (eq 'dotfile layer-name) + (configuration-layer/get-layer layer-name))) (min-version (when (listp pkg) (plist-get (cdr pkg) :min-version))) (step (when (listp pkg) (plist-get (cdr pkg) :step))) + (toggle (when (listp pkg) (plist-get (cdr pkg) :toggle))) (excluded (when (listp pkg) (plist-get (cdr pkg) :excluded))) - (toggle (when (and togglep (listp pkg)) (plist-get (cdr pkg) :toggle))) + (location (when (listp pkg) (plist-get (cdr pkg) :location))) (protected (when (listp pkg) (plist-get (cdr pkg) :protected))) + (init-func (intern (format "%S/init-%S" + layer-name pkg-name))) + (pre-init-func (intern (format "%S/pre-init-%S" + layer-name pkg-name))) + (post-init-func (intern (format "%S/post-init-%S" + layer-name pkg-name))) + (ownerp (or (eq 'dotfile layer-name) + (fboundp init-func))) (copyp (not (null obj))) - (obj (if obj obj (cfgl-package name-str :name name-sym)))) - (when (and (listp location) - (eq (car location) 'recipe) - (eq (plist-get (cdr location) :fetcher) 'local)) - (setq location - `(recipe - :fetcher file - :path ,(expand-file-name - (format - "%s%s/%s.el" - (configuration-layer/get-layer-local-dir - (oref layer :name)) - name-str name-str))))) - (when location (oset obj :location location)) + (obj (if obj obj (cfgl-package pkg-name-str :name pkg-name)))) (when min-version (oset obj :min-version (version-to-list min-version))) (when step (oset obj :step step)) - (oset obj :excluded (or excluded (oref obj :excluded))) (when toggle (oset obj :toggle toggle)) + (oset obj :excluded (or excluded (oref obj :excluded))) + (when location + (if (and (listp location) + (eq (car location) 'recipe) + (eq (plist-get (cdr location) :fetcher) 'local)) + (cond + (layer (let ((path (expand-file-name + (format "%s%s/%s.el" + (configuration-layer/get-layer-local-dir + layer-name) + pkg-name-str pkg-name-str)))) + (oset obj :location `(recipe :fetcher file :path ,path)))) + ((eq 'dotfile layer-name) + ;; TODO what is the local path for a packages owned by the dotfile? + nil)) + (oset obj :location location))) ;; cannot override protected packages (unless copyp ;; a bootstrap package is protected (oset obj :protected (or protected (eq 'bootstrap step))) (when protected - (push name-sym configuration-layer--protected-packages))) + (push pkg-name configuration-layer--protected-packages))) + (when ownerp + ;; warn about mutliple owners + (when (and (oref obj :owners) + (not (memq layer-name (oref obj :owners)))) + (configuration-layer//warning + (format (concat "More than one init function found for " + "package %S. Previous owner was %S, " + "replacing it with layer %S.") + pkg-name (car (oref obj :owners)) layer-name))) + ;; last owner wins over the previous one + (push layer-name (oref obj :owners))) + ;; check consistency betwween package and defined init functions + (unless (or ownerp + (fboundp pre-init-func) + (fboundp post-init-func) + (oref obj :excluded)) + (configuration-layer//warning + (format (concat "package %s not initialized in layer %s, " + "you may consider removing this package from " + "the package list or use the :toggle keyword " + "instead of a `when' form.") + pkg-name layer-name))) + ;; check if toggle can be applied + (when (and (not ownerp) + (and (not (eq 'unspecified toggle)) + toggle)) + (configuration-layer//warning + (format (concat "Ignoring :toggle for package %s because " + "layer %S does not own it.") + pkg-name layer-name))) + (when (fboundp pre-init-func) + (push layer-name (oref obj :pre-layers))) + (when (fboundp post-init-func) + (push layer-name (oref obj :post-layers))) obj)) (define-button-type 'help-dotfile-variable @@ -823,10 +866,11 @@ Return nil if package object is not found." (defun configuration-layer/make-all-packages (&optional usedp) "Create objects for _all_ packages. USEDP if non-nil indicates that made packages are used packages." - (configuration-layer/make-packages (configuration-layer/get-layers-list) - usedp)) + (configuration-layer/make-packages-from-layers + (configuration-layer/get-layers-list) usedp)) -(defun configuration-layer/make-packages (layer-names &optional usedp dotfile) +(defun configuration-layer/make-packages-from-layers (layer-names + &optional usedp dotfile) "Read the package lists of layers with name LAYER-NAMES and create packages. USEDP if non-nil indicates that made packages are used packages. DOTFILE if non-nil will process the dotfile `dotspacemacs-additional-packages' @@ -835,71 +879,25 @@ variable as well." (let ((layer (configuration-layer/get-layer layer-name))) (dolist (pkg (cfgl-layer-get-packages layer)) (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) - (init-func (intern (format "%S/init-%S" - layer-name pkg-name))) - (pre-init-func (intern (format "%S/pre-init-%S" - layer-name pkg-name))) - (post-init-func (intern (format "%S/post-init-%S" - layer-name pkg-name))) - (ownerp (fboundp init-func)) (obj (configuration-layer/get-package pkg-name))) (if obj - (setq obj (configuration-layer/make-package pkg obj ownerp layer)) - (setq obj (configuration-layer/make-package pkg nil ownerp layer))) - (configuration-layer//add-package obj (and ownerp usedp)) - (when ownerp - ;; last owner wins over the previous one, - ;; still warn about mutliple owners - (when (and (oref obj :owners) - (not (memq layer-name (oref obj :owners)))) - (configuration-layer//warning - (format (concat "More than one init function found for " - "package %S. Previous owner was %S, " - "replacing it with layer %S.") - pkg-name (car (oref obj :owners)) layer-name))) - (push layer-name (oref obj :owners))) - ;; if no function at all is found for the package, then check - ;; again this layer later to resolve `package-usedp' usage in - ;; `packages.el' files - ;; TODO remove this hack in version 0.201 - (unless (or ownerp - (fboundp pre-init-func) - (fboundp post-init-func) - (oref obj :excluded)) - (unless (memq layer-name configuration-layer--delayed-layers) - (configuration-layer//warning - (format (concat "package %s not initialized in layer %s, " - "you may consider removing this package from " - "the package list or use the :toggle keyword " - "instead of a `when' form.") - pkg-name layer-name)) - (push layer-name configuration-layer--delayed-layers))) - ;; check if toggle can be applied - (when (and (not ownerp) - (listp pkg) - (spacemacs/mplist-get pkg :toggle)) - (configuration-layer//warning - (format (concat "Ignoring :toggle for package %s because " - "layer %S does not own it.") - pkg-name layer-name))) - (when (fboundp pre-init-func) - (push layer-name (oref obj :pre-layers))) - (when (fboundp post-init-func) - (push layer-name (oref obj :post-layers))))))) + (setq obj (configuration-layer/make-package pkg layer-name obj)) + (setq obj (configuration-layer/make-package pkg layer-name))) + (configuration-layer//add-package obj (and (oref obj :owners) + usedp)))))) ;; additional and excluded packages from dotfile (when dotfile (dolist (pkg dotspacemacs-additional-packages) (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) (obj (configuration-layer/get-package pkg-name))) (if obj - (setq obj (configuration-layer/make-package pkg obj t)) - (setq obj (configuration-layer/make-package pkg nil t)) - (push 'dotfile (oref obj :owners))) + (setq obj (configuration-layer/make-package pkg 'dotfile obj)) + (setq obj (configuration-layer/make-package pkg 'dotfile))) (configuration-layer//add-package obj usedp))) (dolist (xpkg dotspacemacs-excluded-packages) (let ((obj (configuration-layer/get-package xpkg))) (unless obj - (setq obj (configuration-layer/make-package xpkg))) + (setq obj (configuration-layer/make-package xpkg 'dotfile))) (configuration-layer//add-package obj usedp) (oset obj :excluded t))))) @@ -1184,9 +1182,7 @@ wether the declared layer is an used one or not." (setq configuration-layer--used-packages nil) (let* ((warning-minimum-level :error)) ;; first pass - (configuration-layer/make-packages layers t t) - ;; second pass to resolve package-usedp calls - (configuration-layer/make-packages configuration-layer--delayed-layers t) + (configuration-layer/make-packages-from-layers layers t t) (setq configuration-layer--used-packages (configuration-layer//sort-packages configuration-layer--used-packages)))) diff --git a/tests/core/core-configuration-layer-utest.el b/tests/core/core-configuration-layer-utest.el index 38054d5df..6000f4b37 100644 --- a/tests/core/core-configuration-layer-utest.el +++ b/tests/core/core-configuration-layer-utest.el @@ -482,107 +482,134 @@ ;; --------------------------------------------------------------------------- (ert-deftest test-make-package--make-package-from-symbol () - (let* ((input 'testpkg) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (input 'testpkg) (expected (cfgl-package "testpkg" :name 'testpkg :location 'elpa - :owners nil + :owners '(layer-make-pkg-1) :pre-layers nil :post-layers nil :step nil - :excluded nil)) - (result (configuration-layer/make-package input))) - (should (equal result expected)))) + :excluded nil))) + (defun layer-make-pkg-1/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-make-pkg-1" :name 'layer-make-pkg-1)) t) + (should + (equal + expected + (configuration-layer/make-package input 'layer-make-pkg-1))))) (ert-deftest test-make-package--make-package-from-list () - (let* ((input '(testpkg :location local :step pre)) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (input '(testpkg :location local :step pre)) (expected (cfgl-package "testpkg" :name 'testpkg - :owners nil + :owners '(layer-make-pkg-2) :location 'local :pre-layers nil :post-layers nil :step 'pre - :excluded nil)) - (result (configuration-layer/make-package input))) - (should (equal result expected)))) + :excluded nil))) + (defun layer-make-pkg-2/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-make-pkg-2" :name 'layer-make-pkg-2)) t) + (should + (equal + expected + (configuration-layer/make-package input 'layer-make-pkg-2))))) -(ert-deftest test-make-package--can-override-toggle-if-togglep () - (let* ((obj (cfgl-package "testpkg" - :name 'testpkg - :toggle 'foo)) - (pkg '(testpkg :toggle bar)) - (expected (cfgl-package "testpkg" - :name 'testpkg - :toggle 'bar)) - (result (configuration-layer/make-package pkg obj t))) - (should (equal result expected)))) + +(ert-deftest test-make-package--can-override-toggle () + (let (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (obj (cfgl-package "testpkg" :name 'testpkg :toggle 'foo)) + (pkg '(testpkg :toggle bar)) + (expected (cfgl-package "testpkg" + :name 'testpkg + :owners '(layer-override-toggle-1) + :toggle 'bar))) + (defun layer-override-toggle-1/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-override-toggle-1" :name 'layer-override-toggle-1)) + t) + (should + (equal + expected + (configuration-layer/make-package pkg 'layer-override-toggle-1 obj))))) (ert-deftest test-make-package--can-override-location () - (let* ((obj (cfgl-package "testpkg" + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (obj (cfgl-package "testpkg" :name 'testpkg :location 'elpa)) (pkg '(testpkg :location local)) (expected (cfgl-package "testpkg" :name 'testpkg - :location 'local)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) + :owners '(layer-override-loc-1) + :location 'local))) + (defun layer-override-loc-1/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-override-loc-1" :name 'layer-override-loc-1)) t) + (should + (equal expected + (configuration-layer/make-package pkg 'layer-override-loc-1 obj))))) (ert-deftest test-make-package--can-override-step () - (let* ((obj (cfgl-package "testpkg" + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (obj (cfgl-package "testpkg" :name 'testpkg :step nil)) (pkg '(testpkg :step pre)) (expected (cfgl-package "testpkg" :name 'testpkg - :step 'pre)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) - -(ert-deftest test-make-package--can-override-toggle-if-not-togglep () - (let* ((obj (cfgl-package "testpkg" - :name 'testpkg - :toggle 'foo)) - (pkg '(testpkg :toggle bar)) - (expected (cfgl-package "testpkg" - :name 'testpkg - :toggle 'foo)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) - -(ert-deftest test-make-package--cannot-override-owners () - (let* ((obj (cfgl-package "testpkg" - :name 'testpkg - :owners nil)) - (pkg '(testpkg :owners '(foo))) - (expected (cfgl-package "testpkg" - :name 'testpkg - :owners nil)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) + :owners '(layer-override-step-1) + :step 'pre))) + (defun layer-override-step-1/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-override-step-1" :name 'layer-override-step-1)) t) + (should + (equal + expected + (configuration-layer/make-package pkg 'layer-override-step-1 obj))))) (ert-deftest test-make-package--cannot-override-protected () - (let* ((obj (cfgl-package "testpkg" + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (obj (cfgl-package "testpkg" :name 'testpkg :protected t)) (pkg '(testpkg :protected nil)) (expected (cfgl-package "testpkg" :name 'testpkg - :protected t)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) + :owners '(layer-override-protected-1) + :protected t))) + (defun layer-override-protected-1/init-testpkg nil) + (helper--set-layers + `(,(cfgl-layer "layer-override-protected-1" + :name 'layer-override-protected-1)) t) + (should + (equal + expected + (configuration-layer/make-package pkg 'layer-override-protected-1 obj))))) (ert-deftest test-make-package--cannot-unexclude-excluded-package () - (let* ((obj (cfgl-package "testpkg" + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (obj (cfgl-package "testpkg" :name 'testpkg :excluded t)) (pkg '(testpkg :excluded nil)) (expected (cfgl-package "testpkg" :name 'testpkg - :excluded t)) - (result (configuration-layer/make-package pkg obj))) - (should (equal result expected)))) + :excluded t))) + (helper--set-layers `(,(cfgl-layer "layer1" :name 'layer1)) t) + (should (equal expected + (configuration-layer/make-package pkg 'layer1 obj))))) ;; --------------------------------------------------------------------------- ;; configuration-layer//get-distant-packages @@ -629,10 +656,10 @@ (configuration-layer//get-distant-packages packages nil))))) ;; --------------------------------------------------------------------------- -;; configuration-layer/make-packages +;; configuration-layer/make-packages-from-layers ;; --------------------------------------------------------------------------- -(ert-deftest test-make-packages--symbols-only () +(ert-deftest test-make-packages-from-layers--symbols-only () (let* ((layer1 (cfgl-layer "layer1" :name 'layer1 :dir "/path/" @@ -645,7 +672,7 @@ (defun layer1/init-pkg1 nil) (defun layer1/init-pkg2 nil) (defun layer1/init-pkg3 nil) - (configuration-layer/make-packages '(layer1)) + (configuration-layer/make-packages-from-layers '(layer1)) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 :owners '(layer1)) (ht-get configuration-layer--indexed-packages 'pkg3)) @@ -654,7 +681,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer1)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--lists-only () +(ert-deftest test-make-packages-from-layers--lists-only () (let* ((layer1 (cfgl-layer "layer1" :name 'layer1 :dir "/path/" @@ -669,7 +696,7 @@ (defun layer1/init-pkg1 nil) (defun layer1/init-pkg2 nil) (defun layer1/init-pkg3 nil) - (configuration-layer/make-packages '(layer1)) + (configuration-layer/make-packages-from-layers '(layer1)) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 @@ -685,7 +712,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer1) :excluded t) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--symbols-and-lists () +(ert-deftest test-make-packages-from-layers--symbols-and-lists () (let* ((layer1 (cfgl-layer "layer1" :name 'layer1 :dir "/path/" @@ -702,7 +729,7 @@ (defun layer1/init-pkg2 nil) (defun layer1/init-pkg3 nil) (defun layer1/init-pkg4 nil) - (configuration-layer/make-packages '(layer1)) + (configuration-layer/make-packages-from-layers '(layer1)) (should (and (equal (cfgl-package "pkg4" :name 'pkg4 :owners '(layer1)) (ht-get configuration-layer--indexed-packages 'pkg4)) @@ -720,7 +747,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer1)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--pkg2-has-no-owner-because-no-init-function () +(ert-deftest test-make-packages-from-layers--pkg2-has-no-owner-because-no-init-function () (let* ((layer2 (cfgl-layer "layer2" :name 'layer2 :dir "/path/" @@ -735,7 +762,7 @@ (defun layer2/init-pkg3 nil) (mocker-let ((configuration-layer//warning (m) ((:output nil)))) - (configuration-layer/make-packages '(layer2)) + (configuration-layer/make-packages-from-layers '(layer2)) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 :owners '(layer2)) (ht-get configuration-layer--indexed-packages 'pkg3)) @@ -744,7 +771,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer2)) (ht-get configuration-layer--indexed-packages 'pkg1))))))) -(ert-deftest test-make-packages--pre-init-function () +(ert-deftest test-make-packages-from-layers--pre-init-function () (let* ((layer3 (cfgl-layer "layer3" :name 'layer3 :dir "/path/" @@ -760,14 +787,14 @@ (helper--set-layers (list layer3 layer4) t) (defun layer3/init-pkg1 nil) (defun layer4/pre-init-pkg1 nil) - (configuration-layer/make-packages '(layer3 layer4)) + (configuration-layer/make-packages-from-layers '(layer3 layer4)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer3) :pre-layers '(layer4)) (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--post-init-function () +(ert-deftest test-make-packages-from-layers--post-init-function () (let* ((layer3 (cfgl-layer "layer3" :name 'layer3 :dir "/path/" @@ -783,14 +810,14 @@ (helper--set-layers (list layer3 layer5) t) (defun layer3/init-pkg1 nil) (defun layer5/post-init-pkg1 nil) - (configuration-layer/make-packages '(layer3 layer5)) + (configuration-layer/make-packages-from-layers '(layer3 layer5)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer3) :post-layers '(layer5)) (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--pre-and-post-init-functions () +(ert-deftest test-make-packages-from-layers--pre-and-post-init-functions () (let* ((layer3 (cfgl-layer "layer3" :name 'layer3 :dir "/path/" @@ -807,7 +834,7 @@ (defun layer3/init-pkg1 nil) (defun layer6/pre-init-pkg1 nil) (defun layer6/post-init-pkg1 nil) - (configuration-layer/make-packages '(layer3 layer6)) + (configuration-layer/make-packages-from-layers '(layer3 layer6)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer3) @@ -815,7 +842,7 @@ :post-layers '(layer6)) (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--several-init-functions-last-one-is-the-owner () +(ert-deftest test-make-packages-from-layers--several-init-functions-last-one-is-the-owner () (let* ((layer7 (cfgl-layer "layer7" :name 'layer7 :dir "/path/" @@ -834,13 +861,13 @@ (defun layer8/init-pkg1 nil) (mocker-let ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer7 layer8)) + (configuration-layer/make-packages-from-layers '(layer7 layer8)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer8 layer7)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--layer-10-excludes-pkg2-in-layer-9 () +(ert-deftest test-make-packages-from-layers--layer-10-excludes-pkg2-in-layer-9 () (let* ((layer9 (cfgl-layer "layer9" :name 'layer9 :dir "/path/" @@ -857,7 +884,7 @@ (defun layer9/init-pkg1 nil) (defun layer9/init-pkg2 nil) (defun layer10/init-pkg3 nil) - (configuration-layer/make-packages '(layer9 layer10)) + (configuration-layer/make-packages-from-layers '(layer9 layer10)) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 :owners '(layer10)) (ht-get configuration-layer--indexed-packages 'pkg3)) @@ -866,7 +893,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer9)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--dotfile-excludes-pkg2-in-layer-11 () +(ert-deftest test-make-packages-from-layers--dotfile-excludes-pkg2-in-layer-11 () (let* ((layer11 (cfgl-layer "layer11" :name 'layer11 :dir "/path/" @@ -881,7 +908,7 @@ (defun layer11/init-pkg1 nil) (defun layer11/init-pkg2 nil) (defun layer11/init-pkg3 nil) - (configuration-layer/make-packages '(layer11) 'used 'dotfile) + (configuration-layer/make-packages-from-layers '(layer11) 'used 'dotfile) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 :owners '(layer11)) (ht-get configuration-layer--indexed-packages 'pkg3)) @@ -890,7 +917,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer11)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--dotfile-declares-and-owns-one-additional-package () +(ert-deftest test-make-packages-from-layers--dotfile-declares-and-owns-one-additional-package () (let* ((layer12 (cfgl-layer "layer12" :name 'layer12 :dir "/path/" @@ -903,7 +930,7 @@ (helper--set-layers (list layer12) t) (defun layer12/init-pkg1 nil) (defun layer12/init-pkg2 nil) - (configuration-layer/make-packages '(layer12) 'used 'dotfile) + (configuration-layer/make-packages-from-layers '(layer12) 'used 'dotfile) (should (and (equal (cfgl-package "pkg3" :name 'pkg3 :owners '(dotfile)) (ht-get configuration-layer--indexed-packages 'pkg3)) @@ -912,7 +939,7 @@ (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer12)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--last-owner-can-overwrite-location () +(ert-deftest test-make-packages-from-layers--last-owner-can-overwrite-location () (let* ((layer13 (cfgl-layer "layer13" :name 'layer13 :dir "/path/" @@ -929,16 +956,14 @@ (helper--set-layers (list layer13 layer14) t) (defun layer13/init-pkg1 nil) (defun layer14/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer13 layer14)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer14 layer13) - :location 'local) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer13 layer14)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer14 layer13) + :location 'local) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--last-owner-can-overwrite-step-nil-to-pre () +(ert-deftest test-make-packages-from-layers--last-owner-can-overwrite-step-nil-to-pre () (let* ((layer15 (cfgl-layer "layer15" :name 'layer15 :dir "/path/" @@ -955,16 +980,14 @@ (helper--set-layers (list layer15 layer16) t) (defun layer15/init-pkg1 nil) (defun layer16/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer15 layer16)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer16 layer15) - :step 'pre) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer15 layer16)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer16 layer15) + :step 'pre) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--last-owner-cannot-overwrite-step-pre-to-nil () +(ert-deftest test-make-packages-from-layers--last-owner-cannot-overwrite-step-pre-to-nil () (let* ((layer15 (cfgl-layer "layer15" :name 'layer15 :dir "/path/" @@ -981,16 +1004,14 @@ (helper--set-layers (list layer15 layer16) t) (defun layer15/init-pkg1 nil) (defun layer16/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer15 layer16)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer16 layer15) - :step 'pre) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer15 layer16)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer16 layer15) + :step 'pre) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--last-owner-can-overwrite-exclude () +(ert-deftest test-make-packages-from-layers--last-owner-can-overwrite-exclude () (let* ((layer17 (cfgl-layer "layer17" :name 'layer17 :dir "/path/" @@ -1008,16 +1029,14 @@ (helper--set-layers (list layer17 layer18) t) (defun layer17/init-pkg1 nil) (defun layer18/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer17 layer18)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer18 layer17) - :excluded t) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer17 layer18)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer18 layer17) + :excluded t) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--owner-layer-can-define-toggle () +(ert-deftest test-make-packages-from-layers--owner-layer-can-define-toggle () (let* ((layer19 (cfgl-layer "layer19" :name 'layer19 :dir "/path/" @@ -1029,14 +1048,14 @@ (helper--set-layers (list layer19) t) (defun layer19/init-pkg1 nil) (let (configuration-layer--used-packages)) - (configuration-layer/make-packages '(layer19)) + (configuration-layer/make-packages-from-layers '(layer19)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer19) :toggle '(foo-toggle)) (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--not-owner-layer-cannot-define-toggle () +(ert-deftest test-make-packages-from-layers--not-owner-layer-can-define-toggle-with-warning () (let* ((layer20 (cfgl-layer "layer20" :name 'layer20 :dir "/path/" @@ -1055,15 +1074,15 @@ (defun layer21/post-init-pkg1 nil) (mocker-let ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer20 layer21)) + (configuration-layer/make-packages-from-layers '(layer20 layer21)) (should (equal (cfgl-package "pkg1" :name 'pkg1 :owners '(layer20) :post-layers '(layer21) - :toggle t) + :toggle '(foo-toggle)) (ht-get configuration-layer--indexed-packages 'pkg1)))))) -(ert-deftest test-make-packages--new-owner-layer-can-override-toggle () +(ert-deftest test-make-packages-from-layers--new-owner-layer-can-override-toggle () (let* ((layer22 (cfgl-layer "layer22" :name 'layer22 :dir "/path/" @@ -1080,16 +1099,14 @@ (helper--set-layers (list layer22 layer23) t) (defun layer22/init-pkg1 nil) (defun layer23/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer22 layer23)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer23 layer22) - :toggle '(bar-toggle)) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer22 layer23)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer23 layer22) + :toggle '(bar-toggle)) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--dotfile-additional-pkg-can-override-toggle () +(ert-deftest test-make-packages-from-layers--dotfile-additional-pkg-can-override-toggle () (let* ((layer22 (cfgl-layer "layer22" :name 'layer22 :dir "/path/" @@ -1106,16 +1123,14 @@ (helper--set-layers (list layer22 layer23) t) (defun layer22/init-pkg1 nil) (defun layer23/init-pkg1 nil) - (mocker-let - ((configuration-layer//warning (msg &rest args) ((:output nil :occur 1)))) - (configuration-layer/make-packages '(layer22 layer23)) - (should (equal (cfgl-package "pkg1" - :name 'pkg1 - :owners '(layer23 layer22) - :toggle '(bar-toggle)) - (ht-get configuration-layer--indexed-packages 'pkg1)))))) + (configuration-layer/make-packages-from-layers '(layer22 layer23)) + (should (equal (cfgl-package "pkg1" + :name 'pkg1 + :owners '(layer23 layer22) + :toggle '(bar-toggle)) + (ht-get configuration-layer--indexed-packages 'pkg1))))) -(ert-deftest test-make-packages--not-selected-packages-are-not-excluded () +(ert-deftest test-make-packages-from-layers--not-selected-packages-are-not-excluded () (let* ((layer24 (cfgl-layer "layer24" :name 'layer24 :dir "/path/" @@ -1135,7 +1150,7 @@ (defun layer24/init-pkg2 nil) (defun layer25/init-pkg1 nil) (defun layer25/post-init-pkg2 nil) - (configuration-layer/make-packages '(layer24 layer25)) + (configuration-layer/make-packages-from-layers '(layer24 layer25)) (should (and (equal (cfgl-package "pkg1" :name 'pkg1 @@ -1149,7 +1164,7 @@ :excluded nil) (ht-get configuration-layer--indexed-packages 'pkg2)))))) -(ert-deftest test-make-packages--not-selected-package-in-a-layer-can-still-be-created-with-no-owner () +(ert-deftest test-make-packages-from-layers--not-selected-package-in-a-layer-can-still-be-created-with-no-owner () (let* ((layer26 (cfgl-layer "layer26" :name 'layer26 :dir "/path/" @@ -1168,7 +1183,7 @@ (defun layer26/init-pkg2 nil) (defun layer27/post-init-pkg1 nil) (defun layer27/post-init-pkg2 nil) - (configuration-layer/make-packages '(layer26 layer27)) + (configuration-layer/make-packages-from-layers '(layer26 layer27)) (should (and (equal (cfgl-package "pkg1" :name 'pkg1 @@ -1604,19 +1619,27 @@ ;; --------------------------------------------------------------------------- (ert-deftest test-package-has-a-recipe-p--true () - (let (configuration-layer--used-packages + (let (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + configuration-layer--used-packages (configuration-layer--indexed-packages (make-hash-table :size 2048))) + (helper--set-layers `(,(cfgl-layer "layer1" :name 'layer1)) t) (helper--set-packages - `(,(configuration-layer/make-package '(pkg1 :location (recipe blah))) - ,(configuration-layer/make-package '(pkg2 :location elpa))) t) + `(,(configuration-layer/make-package '(pkg1 :location (recipe blah)) + 'layer1) + ,(configuration-layer/make-package '(pkg2 :location elpa) 'layer1)) t) (should (configuration-layer//package-has-recipe-p 'pkg1)))) (ert-deftest test-package-has-a-recipe-p--false () - (let (configuration-layer--used-packages + (let (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + configuration-layer--used-packages (configuration-layer--indexed-packages (make-hash-table :size 2048))) + (helper--set-layers `(,(cfgl-layer "layer1" :name 'layer1)) t) (helper--set-packages - `(,(configuration-layer/make-package '(pkg1 :location (recipe blah))) - ,(configuration-layer/make-package '(pkg2 :location elpa))) t) + `(,(configuration-layer/make-package '(pkg1 :location (recipe blah)) + 'layer1) + ,(configuration-layer/make-package '(pkg2 :location elpa) 'layer1)) t) (should (not (configuration-layer//package-has-recipe-p 'pkg2))))) ;; --------------------------------------------------------------------------- @@ -1624,20 +1647,36 @@ ;; --------------------------------------------------------------------------- (ert-deftest test-get-package-recipe--return-recipe-if-package-has-one () - (let (configuration-layer--used-packages + (let (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + configuration-layer--used-packages (configuration-layer--indexed-packages (make-hash-table :size 2048))) + (defun layer-no-recipe-1/init-pkg1 nil) + (defun layer-no-recipe-1/init-pkg2 nil) + (helper--set-layers + `(,(cfgl-layer "layer-no-recipe-1" :name 'layer-no-recipe-1)) t) (helper--set-packages - `(,(configuration-layer/make-package '(pkg1 :location (recipe blah))) - ,(configuration-layer/make-package '(pkg2 :location elpa))) t) + `(,(configuration-layer/make-package '(pkg1 :location (recipe blah)) + 'layer-no-recipe-1) + ,(configuration-layer/make-package '(pkg2 :location elpa) + 'layer-no-recipe-1)) t) (should (eq 'recipe (car (configuration-layer//get-package-recipe 'pkg1)))))) (ert-deftest test-get-package-recipe--return-nil-if-package-has-no-recipe () - (let (configuration-layer--used-packages + (let (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + configuration-layer--used-packages (configuration-layer--indexed-packages (make-hash-table :size 2048))) + (defun layer-no-recipe-2/init-pkg1 nil) + (defun layer-no-recipe-2/init-pkg2 nil) + (helper--set-layers + `(,(cfgl-layer "layer-no-recipe-2" :name 'layer-no-recipe-2)) t) (helper--set-packages - `(,(configuration-layer/make-package '(pkg1 :location (recipe blah))) - ,(configuration-layer/make-package '(pkg2 :location elpa))) t) + `(,(configuration-layer/make-package '(pkg1 :location (recipe blah)) + 'layer-no-recipe-2) + ,(configuration-layer/make-package '(pkg2 :location elpa) + 'layer-no-recipe-2)) t) (should (null (configuration-layer//get-package-recipe 'pkg2))))) ;; --------------------------------------------------------------------------- @@ -1645,60 +1684,98 @@ ;; --------------------------------------------------------------------------- (ert-deftest test-filter-packages--example-filter-excluded-packages () - (let* ((pkg1 (configuration-layer/make-package 'pkg1)) - (pkg2 (configuration-layer/make-package 'pkg2)) - (pkg3 (configuration-layer/make-package 'pkg3)) - (pkg4 (configuration-layer/make-package 'pkg4)) - (pkg5 (configuration-layer/make-package 'pkg5)) - (pkg6 (configuration-layer/make-package 'pkg6)) - (pkg7 (configuration-layer/make-package 'pkg7)) - (pkg8 (configuration-layer/make-package 'pkg8)) + (defun layer-filter-1/init-pkg1 nil) + (defun layer-filter-1/init-pkg2 nil) + (defun layer-filter-1/init-pkg3 nil) + (defun layer-filter-1/init-pkg4 nil) + (defun layer-filter-1/init-pkg5 nil) + (defun layer-filter-1/init-pkg6 nil) + (defun layer-filter-1/init-pkg7 nil) + (defun layer-filter-1/init-pkg8 nil) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (pkg1 (configuration-layer/make-package 'pkg1 'layer-filter-1)) + (pkg2 (configuration-layer/make-package 'pkg2 'layer-filter-1)) + (pkg3 (configuration-layer/make-package 'pkg3 'layer-filter-1)) + (pkg4 (configuration-layer/make-package 'pkg4 'layer-filter-1)) + (pkg5 (configuration-layer/make-package 'pkg5 'layer-filter-1)) + (pkg6 (configuration-layer/make-package 'pkg6 'layer-filter-1)) + (pkg7 (configuration-layer/make-package 'pkg7 'layer-filter-1)) + (pkg8 (configuration-layer/make-package 'pkg8 'layer-filter-1)) (pkgs (list pkg1 pkg2 pkg3 pkg4 pkg5 pkg6 pkg7 pkg8))) + (helper--set-layers + `(,(cfgl-layer "layer-filter-1" :name 'layer-filter-1)) t) (oset pkg1 :excluded t) (oset pkg3 :excluded t) (oset pkg5 :excluded t) (oset pkg6 :excluded t) - (should (equal (list (cfgl-package "pkg2" :name 'pkg2) - (cfgl-package "pkg4" :name 'pkg4) - (cfgl-package "pkg7" :name 'pkg7) - (cfgl-package "pkg8" :name 'pkg8)) - (configuration-layer/filter-objects - pkgs (lambda (x) - (not (oref x :excluded)))))))) + (should + (equal (list (cfgl-package "pkg2" :name 'pkg2 :owners '(layer-filter-1)) + (cfgl-package "pkg4" :name 'pkg4 :owners '(layer-filter-1)) + (cfgl-package "pkg7" :name 'pkg7 :owners '(layer-filter-1)) + (cfgl-package "pkg8" :name 'pkg8 :owners '(layer-filter-1))) + (configuration-layer/filter-objects + pkgs (lambda (x) + (not (oref x :excluded)))))))) (ert-deftest test-filter-packages--expample-filter-local-packages () - (let* ((pkg1 (configuration-layer/make-package 'pkg1)) - (pkg2 (configuration-layer/make-package 'pkg2)) - (pkg3 (configuration-layer/make-package 'pkg3)) - (pkg4 (configuration-layer/make-package 'pkg4)) - (pkg5 (configuration-layer/make-package 'pkg5)) - (pkg6 (configuration-layer/make-package 'pkg6)) - (pkg7 (configuration-layer/make-package 'pkg7)) - (pkg8 (configuration-layer/make-package 'pkg8)) + (defun layer-filter-2/init-pkg1 nil) + (defun layer-filter-2/init-pkg2 nil) + (defun layer-filter-2/init-pkg3 nil) + (defun layer-filter-2/init-pkg4 nil) + (defun layer-filter-2/init-pkg5 nil) + (defun layer-filter-2/init-pkg6 nil) + (defun layer-filter-2/init-pkg7 nil) + (defun layer-filter-2/init-pkg8 nil) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (pkg1 (configuration-layer/make-package 'pkg1 'layer-filter-2)) + (pkg2 (configuration-layer/make-package 'pkg2 'layer-filter-2)) + (pkg3 (configuration-layer/make-package 'pkg3 'layer-filter-2)) + (pkg4 (configuration-layer/make-package 'pkg4 'layer-filter-2)) + (pkg5 (configuration-layer/make-package 'pkg5 'layer-filter-2)) + (pkg6 (configuration-layer/make-package 'pkg6 'layer-filter-2)) + (pkg7 (configuration-layer/make-package 'pkg7 'layer-filter-2)) + (pkg8 (configuration-layer/make-package 'pkg8 'layer-filter-2)) (pkgs (list pkg1 pkg2 pkg3 pkg4 pkg5 pkg6 pkg7 pkg8))) + (helper--set-layers + `(,(cfgl-layer "layer-filter-2" :name 'layer-filter-2)) t) (oset pkg1 :location 'local) (oset pkg3 :location 'local) (oset pkg5 :location 'local) (oset pkg6 :location 'local) - (should (equal (list (cfgl-package "pkg2" :name 'pkg2) - (cfgl-package "pkg4" :name 'pkg4) - (cfgl-package "pkg7" :name 'pkg7) - (cfgl-package "pkg8" :name 'pkg8)) - (configuration-layer/filter-objects - pkgs (lambda (x) - (not (eq 'local (oref x :location))))))))) + (should + (equal (list (cfgl-package "pkg2" :name 'pkg2 :owners '(layer-filter-2)) + (cfgl-package "pkg4" :name 'pkg4 :owners '(layer-filter-2)) + (cfgl-package "pkg7" :name 'pkg7 :owners '(layer-filter-2)) + (cfgl-package "pkg8" :name 'pkg8 :owners '(layer-filter-2))) + (configuration-layer/filter-objects + pkgs (lambda (x) + (not (eq 'local (oref x :location))))))))) (ert-deftest test-filter-packages--example-filter-packages-local-or-excluded () - (let* ((pkg1 (configuration-layer/make-package 'pkg1)) - (pkg2 (configuration-layer/make-package 'pkg2)) - (pkg3 (configuration-layer/make-package 'pkg3)) - (pkg4 (configuration-layer/make-package 'pkg4)) - (pkg5 (configuration-layer/make-package 'pkg5)) - (pkg6 (configuration-layer/make-package 'pkg6)) - (pkg7 (configuration-layer/make-package 'pkg7)) - (pkg8 (configuration-layer/make-package 'pkg8)) + (defun layer-filter-3/init-pkg1 nil) + (defun layer-filter-3/init-pkg2 nil) + (defun layer-filter-3/init-pkg3 nil) + (defun layer-filter-3/init-pkg4 nil) + (defun layer-filter-3/init-pkg5 nil) + (defun layer-filter-3/init-pkg6 nil) + (defun layer-filter-3/init-pkg7 nil) + (defun layer-filter-3/init-pkg8 nil) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (pkg1 (configuration-layer/make-package 'pkg1 'layer-filter-3)) + (pkg2 (configuration-layer/make-package 'pkg2 'layer-filter-3)) + (pkg3 (configuration-layer/make-package 'pkg3 'layer-filter-3)) + (pkg4 (configuration-layer/make-package 'pkg4 'layer-filter-3)) + (pkg5 (configuration-layer/make-package 'pkg5 'layer-filter-3)) + (pkg6 (configuration-layer/make-package 'pkg6 'layer-filter-3)) + (pkg7 (configuration-layer/make-package 'pkg7 'layer-filter-3)) + (pkg8 (configuration-layer/make-package 'pkg8 'layer-filter-3)) (pkgs (list pkg1 pkg2 pkg3 pkg4 pkg5 pkg6 pkg7 pkg8))) + (helper--set-layers + `(,(cfgl-layer "layer-filter-4" :name 'layer-filter-4)) t) (oset pkg1 :location 'local) (oset pkg1 :excluded t) (oset pkg3 :location 'local) @@ -1706,40 +1783,64 @@ (oset pkg6 :location 'local) (oset pkg6 :excluded t) (oset pkg7 :excluded t) - (should (equal (list (cfgl-package "pkg2" :name 'pkg2) - (cfgl-package "pkg4" :name 'pkg4) - (cfgl-package "pkg8" :name 'pkg8)) - (configuration-layer/filter-objects - pkgs (lambda (x) - (and (not (eq 'local (oref x :location))) - (not (oref x :excluded))))))))) + (should + (equal (list (cfgl-package "pkg2" :name 'pkg2 :owners '(layer-filter-3)) + (cfgl-package "pkg4" :name 'pkg4 :owners '(layer-filter-3)) + (cfgl-package "pkg8" :name 'pkg8 :owners '(layer-filter-3))) + (configuration-layer/filter-objects + pkgs (lambda (x) + (and (not (eq 'local (oref x :location))) + (not (oref x :excluded))))))))) (ert-deftest test-filter-packages--example-filter-packages-both-local-and-excluded () - (let* ((pkg1 (configuration-layer/make-package 'pkg1)) - (pkg2 (configuration-layer/make-package 'pkg2)) - (pkg3 (configuration-layer/make-package 'pkg3)) - (pkg4 (configuration-layer/make-package 'pkg4)) - (pkg5 (configuration-layer/make-package 'pkg5)) - (pkg6 (configuration-layer/make-package 'pkg6)) - (pkg7 (configuration-layer/make-package 'pkg7)) - (pkg8 (configuration-layer/make-package 'pkg8)) + (defun layer-filter-4/init-pkg1 nil) + (defun layer-filter-4/init-pkg2 nil) + (defun layer-filter-4/init-pkg3 nil) + (defun layer-filter-4/init-pkg4 nil) + (defun layer-filter-4/init-pkg5 nil) + (defun layer-filter-4/init-pkg6 nil) + (defun layer-filter-4/init-pkg7 nil) + (defun layer-filter-4/init-pkg8 nil) + (let* (configuration-layer--used-layers + (configuration-layer--indexed-layers (make-hash-table :size 1024)) + (pkg1 (configuration-layer/make-package 'pkg1 'layer-filter-4)) + (pkg2 (configuration-layer/make-package 'pkg2 'layer-filter-4)) + (pkg3 (configuration-layer/make-package 'pkg3 'layer-filter-4)) + (pkg4 (configuration-layer/make-package 'pkg4 'layer-filter-4)) + (pkg5 (configuration-layer/make-package 'pkg5 'layer-filter-4)) + (pkg6 (configuration-layer/make-package 'pkg6 'layer-filter-4)) + (pkg7 (configuration-layer/make-package 'pkg7 'layer-filter-4)) + (pkg8 (configuration-layer/make-package 'pkg8 'layer-filter-4)) (pkgs (list pkg1 pkg2 pkg3 pkg4 pkg5 pkg6 pkg7 pkg8))) + (helper--set-layers + `(,(cfgl-layer "layer-filter-4" :name 'layer-filter-4)) t) (oset pkg1 :location 'local) (oset pkg1 :excluded t) (oset pkg3 :location 'local) (oset pkg5 :excluded t) (oset pkg6 :location 'local) (oset pkg6 :excluded t) - (should (equal (list (cfgl-package "pkg2" :name 'pkg2) - (cfgl-package "pkg3" :name 'pkg3 :location 'local) - (cfgl-package "pkg4" :name 'pkg4) - (cfgl-package "pkg5" :name 'pkg5 :excluded t) - (cfgl-package "pkg7" :name 'pkg7) - (cfgl-package "pkg8" :name 'pkg8)) - (configuration-layer/filter-objects - pkgs (lambda (x) - (or (not (eq 'local (oref x :location))) - (not (oref x :excluded))))))))) + (should + (equal (list (cfgl-package "pkg2" + :name 'pkg2 + :owners '(layer-filter-4)) + (cfgl-package "pkg3" + :name 'pkg3 + :location 'local + :owners '(layer-filter-4)) + (cfgl-package "pkg4" :name 'pkg4 + :owners '(layer-filter-4)) + (cfgl-package "pkg5" :name 'pkg5 + :excluded t + :owners '(layer-filter-4)) + (cfgl-package "pkg7" :name 'pkg7 + :owners '(layer-filter-4)) + (cfgl-package "pkg8" :name 'pkg8 + :owners '(layer-filter-4))) + (configuration-layer/filter-objects + pkgs (lambda (x) + (or (not (eq 'local (oref x :location))) + (not (oref x :excluded))))))))) ;; --------------------------------------------------------------------------- ;; configuration-layer/package-usedp