summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess2016-02-08 11:18:17 -0400
committerJoey Hess2016-02-08 11:18:17 -0400
commitb33807cec25f232d5bd43fea6e954d596acbad24 (patch)
treeab07223b2a7e2ffde115464ccbd73e904ddd5968
parentb493414d30c7aef37af904e55316436554fe54b2 (diff)
Allow using combineProperties and propertyList with lists of RevertableProperty.
-rw-r--r--debian/changelog2
-rw-r--r--src/Propellor/Property/List.hs10
-rw-r--r--src/Propellor/Types.hs5
3 files changed, 16 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index 3d18b8fb..b93059b4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,8 @@ propellor (2.15.4) UNRELEASED; urgency=medium
* Added Propellor.Property.LetsEncrypt
* Apache.httpsVirtualHost: New property, setting up a https vhost
with the certificate automatically obtained using letsencrypt.
+ * Allow using combineProperties and propertyList with lists of
+ RevertableProperty.
-- Joey Hess <id@joeyh.name> Mon, 18 Jan 2016 13:15:30 -0400
diff --git a/src/Propellor/Property/List.hs b/src/Propellor/Property/List.hs
index 86fdfbf1..74aa6ca6 100644
--- a/src/Propellor/Property/List.hs
+++ b/src/Propellor/Property/List.hs
@@ -50,6 +50,8 @@ class PropertyList l where
type family PropertyListType t
type instance PropertyListType [Property HasInfo] = HasInfo
type instance PropertyListType [Property NoInfo] = NoInfo
+type instance PropertyListType [RevertableProperty NoInfo] = NoInfo
+type instance PropertyListType [RevertableProperty HasInfo] = HasInfo
type instance PropertyListType PropList = HasInfo
instance PropertyList [Property NoInfo] where
@@ -63,6 +65,14 @@ instance PropertyList [Property HasInfo] where
propertyList desc ps = infoProperty desc (ensureProperties $ map ignoreInfo ps) mempty ps
combineProperties desc ps = infoProperty desc (combineSatisfy ps NoChange) mempty ps
+instance PropertyList [RevertableProperty HasInfo] where
+ propertyList desc ps = propertyList desc (map setupRevertableProperty ps)
+ combineProperties desc ps = combineProperties desc (map setupRevertableProperty ps)
+
+instance PropertyList [RevertableProperty NoInfo] where
+ propertyList desc ps = propertyList desc (map setupRevertableProperty ps)
+ combineProperties desc ps = combineProperties desc (map setupRevertableProperty ps)
+
instance PropertyList PropList where
propertyList desc = propertyList desc . getProperties
combineProperties desc = combineProperties desc . getProperties
diff --git a/src/Propellor/Types.hs b/src/Propellor/Types.hs
index 35e95df7..f224c8ba 100644
--- a/src/Propellor/Types.hs
+++ b/src/Propellor/Types.hs
@@ -182,7 +182,10 @@ propertyChildren (SProperty _ _ cs) = cs
-- | A property that can be reverted. The first Property is run
-- normally and the second is run when it's reverted.
-data RevertableProperty i = RevertableProperty (Property i) (Property i)
+data RevertableProperty i = RevertableProperty
+ { setupRevertableProperty :: Property i
+ , undoRevertableProperty :: Property i
+ }
instance Show (RevertableProperty i) where
show (RevertableProperty p _) = show p