diff --git a/src/mio/node.py b/src/mio/node.py index e5519bcb1c451c963e479c0265a2ae37a7cee810..6a22076ec2e51014d0204da45aa60ac73440e8d4 100755 --- a/src/mio/node.py +++ b/src/mio/node.py @@ -283,7 +283,7 @@ class file_node(target_node): return True else: raise Exception("%s is a link" % self.target) - + if source_sum != target_sum: self.action.append(self.copy) return True @@ -384,8 +384,10 @@ class symlink_node(target_node): def __init__(self, name, decl=None, group=None): target_node.__init__(self, 'symlink', name, decl, group) self.action = [] - self.uid = mio.util.uid(decl) - self.gid = mio.util.gid(decl) + if decl: + self.uid = mio.util.uid(decl) + self.gid = mio.util.gid(decl) + self.delete = parse_boolean(self.decl.delete[0]) def assert_identical(self, other): if self.__cmp__(other) != 0: @@ -396,12 +398,22 @@ class symlink_node(target_node): raise OwnerException(self, other) if self.gid != other.gid: raise GroupException(self, other) + if self.delete != other.delete: + raise DeleteException(self, other) def do_trig(self, prefix): result = False self.target = mio.filecache.locatedir([prefix, self.decl.name[0]]) - if os.path.islink(self.target): + if self.delete: + if os.path.exists(self.target): + if not os.path.islink(self.target): + raise Exception("%s is not a link" % self.target) + self.action.append(self.unlink) + return True + else: + return False + elif os.path.islink(self.target): if os.readlink(self.target) != self.decl.value[0]: self.action.append(self.unlink) self.action.append(self.symlink)