From 63fa125010c3d92782a6f2c319356cb9388c1d0c Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Mon, 2 Feb 2009 16:28:48 +0100
Subject: [PATCH] Version 2009-02-02 16:28

---
 src/mio/node.py | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/mio/node.py b/src/mio/node.py
index e5519bc..6a22076 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)
-- 
GitLab