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.
This commit is contained in:
syl20bnr 2016-09-05 11:54:29 -04:00
parent 047b57223a
commit f7668181d6
2 changed files with 400 additions and 303 deletions

View File

@ -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))))

View File

@ -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