summaryrefslogtreecommitdiffstats
path: root/statemachine.py
diff options
context:
space:
mode:
authorCasey Dahlin <cdahlin@redhat.com>2008-12-22 02:58:28 -0500
committerCasey Dahlin <cdahlin@redhat.com>2008-12-22 02:58:28 -0500
commitb746901eb0eaf46e163ec1a52211f86fdfbc45f1 (patch)
treed79fc342170074aad852f5455a7b31fcd232a609 /statemachine.py
parent456d0c14697cf19128a58b40053fa56d1daf21f5 (diff)
downloadupstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.tar.gz
upstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.tar.xz
upstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.zip
Modify system to use proper patterns rather than just strings and blanks
Diffstat (limited to 'statemachine.py')
-rw-r--r--statemachine.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/statemachine.py b/statemachine.py
index 5c396eb..cc90793 100644
--- a/statemachine.py
+++ b/statemachine.py
@@ -1,6 +1,7 @@
__docformat__ = 'restructuredtext'
from category import Category
+from pattern import Pattern
class StateMachine:
"""
@@ -20,10 +21,11 @@ class StateMachine:
Move states in the given Category `cat` from down to up.
"""
found = None
- for dependency in self.get_applicable_deps(cat):
+ for (match, dependency) in self.get_applicable_deps(cat):
res = self.get_satisfied_states(cat, dependency)
+ print dependency, res
if len(res) == 0:
- return False
+ res = cat.subtract(match)
if found == None:
found = res
else:
@@ -44,18 +46,12 @@ class StateMachine:
least one category in the returned list.
"""
retval = set()
- found = set()
for x in cats1:
for y in cats2:
- if x == y: continue
inter = x.intersect(y)
if inter != None:
retval.add(inter)
- found.add(x)
- found.add(y)
- if len(found) == 0:
- return cats1 & cats2
- return (retval | ((cats1 & cats2) - found))
+ return retval
def add_hold(self, cat):
"""
@@ -85,15 +81,23 @@ class StateMachine:
retval = []
for (x, y) in self.deps:
if x.equiv(cat):
- retval.append(y.fill(cat.intersect(x).args))
+ retval.append((x, y.fill(cat.intersect(x).args)))
return retval
+ def __str__(self):
+ return "\n".join(["%s: %s" % (v, k) for k, v in self.holds.iteritems()])
+
+ def __repr__(self):
+ return str(self)
+
if __name__ == "__main__":
sm = StateMachine()
- sm.deps.append((Category("mounted", type="nfs"), Category("network_up")))
- sm.deps.append((Category("mounted", uuid=None, devname=None, label=None), Category("found_disk", uuid=None, devname=None, label=None)))
- sm.deps.append((Category("mounted", uuid=None, devname=None, label=None), Category("vol_conf", uuid=None, devname=None, label=None)))
- sm.assert_state(Category("vol_conf", uuid=None, devname=None, label="myroot", type="ext3", mountpoint="/"))
- sm.assert_state(Category("found_disk", uuid="d3adb3ef", devname="/dev/sda", label="myroot"))
- sm.assert_state(Category("mounted", uuid=None, type="ext3", devname=None, label=None, mountpoint=None))
- print sm.holds
+ sm.deps.append((Category("mounted", type=Pattern(True, "nfs")), Category("network_up")))
+ sm.deps.append((Category("mounted", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False), type=Pattern(False, "nfs")), Category("found_disk", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False))))
+ sm.deps.append((Category("mounted", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False)), Category("vol_conf", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False))))
+ sm.assert_state(Category("network_up"))
+ sm.assert_state(Category("vol_conf", uuid=Pattern(False), devname=Pattern(False), label=Pattern(True, "myroot"), type=Pattern(True, "ext3"), mountpoint=Pattern(True, "/")))
+ sm.assert_state(Category("vol_conf", uuid=Pattern(False), devname=Pattern(True, "foosrv.com:/vol/home"), label=Pattern(False), type=Pattern(True, "nfs"), mountpoint=Pattern(True, "/home")))
+ sm.assert_state(Category("found_disk", uuid=Pattern(True, "d3adb3ef"), devname=Pattern(True, "/dev/sda"), label=Pattern(True, "myroot")))
+ sm.assert_state(Category("mounted", uuid=Pattern(False), type=Pattern(False), devname=Pattern(False), label=Pattern(False), mountpoint=Pattern(False)))
+ print sm