aboutsummaryrefslogtreecommitdiff
path: root/src/property.lisp
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-08-27 14:32:16 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-08-31 15:30:50 -0700
commitab469268b42d8fc8b0a180990be40e925a65935a (patch)
tree3b18ccc1fc99dfeded420634b4e529e1203881e1 /src/property.lisp
parent7e72e55e996b29ba775e6695ee1f85ce637dc90a (diff)
downloadconsfigurator-ab469268b42d8fc8b0a180990be40e925a65935a.tar.gz
rework PUSHNEW-HOSTATTRS to use EQUAL not EQL & add PUSHNEW-HOSTATTR
Previously, PUSHNEW-HOSTATTRS always used EQL to determine whether a hostattr was already pushed, which would give the wrong answer for many common cases. Now default to using EQUAL, and provide a way for the caller to specify the test function. PUSHNEW-HOSTATTRS now takes a list of hostattrs as a single parameter, rather than using &REST, in order to make room for the new :TEST keyword parameter. To mitigate the inconvenience of no longer using &REST, add PUSHNEW-HOSTATTR. Also fix some parameter and function names in docstrings. Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/property.lisp')
-rw-r--r--src/property.lisp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/property.lisp b/src/property.lisp
index 9e517f2..ac66c38 100644
--- a/src/property.lisp
+++ b/src/property.lisp
@@ -512,19 +512,24 @@ Called by property :HOSTATTRS subroutines."
(setf (getf (slot-value *host* 'hostattrs) k)
(append vs (get-hostattrs k))))
-(defun pushnew-hostattrs (k &rest vs)
- "Push new static informational attributes VS of type KEY.
-
-Called by property :HOSTATTRS subroutines."
+(defun pushnew-hostattr (k v &key (test #'equal))
+ "Push new static informational attribute V of type K.
+TEST is passed on to PUSHNEW. Called by property :HOSTATTRS subroutines."
+ (pushnew-hostattrs k (list v) :test test))
+
+(defun pushnew-hostattrs (k vs &key (test #'equal))
+ "Push new static informational attributes VS of type K.
+VS is a list of items. TEST is passed on to PUSHNEW. Called by property
+:HOSTATTRS subroutines."
(dolist (v (reverse vs))
- (pushnew v (getf (slot-value *host* 'hostattrs) k))))
+ (pushnew v (getf (slot-value *host* 'hostattrs) k) :test test)))
(defun require-data (iden1 iden2)
- "Wrapper around PUSH-HOSTATTRS to indicate that a piece of prerequisite data
+ "Wrapper around PUSHNEW-HOSTATTR to indicate that a piece of prerequisite data
is needed to deploy a property.
Called by property :HOSTATTRS subroutines."
- (pushnew-hostattrs :data (cons iden1 iden2)))
+ (pushnew-hostattr :data (cons iden1 iden2)))
(defun get-hostname (&optional (host *host*))
"Get the hostname of HOST, defaulting to the host to which properties are