From c2afcf4f746482c9635dd1645482b824295254a2 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Fri, 18 Jul 2014 12:01:03 +0100
Subject: [PATCH] Version 2014-07-18 13:01

---
 src/mio/installer.py |  4 +--
 src/mio/log.py       |  4 ++-
 src/mio/node.py      | 63 ++++++++++++++++++++++++--------------------
 3 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/src/mio/installer.py b/src/mio/installer.py
index ea472d4..8400771 100755
--- a/src/mio/installer.py
+++ b/src/mio/installer.py
@@ -206,8 +206,8 @@ class Installer:
         return result
             
     def install_groups(self, prefix, backup):
-#        for g in self.group:
-#            g.do_pre(prefix, backup)
+        for g in self.group:
+            g.trigged(prefix, backup, run_pre=True)
         for g in self.group:
             g.install(prefix, backup)
 
diff --git a/src/mio/log.py b/src/mio/log.py
index e1d7e7c..ee95ade 100755
--- a/src/mio/log.py
+++ b/src/mio/log.py
@@ -1,10 +1,12 @@
 import sys
+import os
 
 MUTE=0
 SILENT=1
 NORMAL=2
 VERBOSE=3
 CHATTY=4
+DEBUG=5
 
 verbosity = NORMAL
 
@@ -13,7 +15,7 @@ def set_verbosity(level):
     verbosity = level
 
 def log(level, *message):
-    if verbosity >= level:
+    if verbosity >= level or level == DEBUG and 'MIO_DEBUG' in os.environ:
         sys.stderr.write(" ".join(message))
         sys.stderr.write("\n")
         sys.stderr.flush()
diff --git a/src/mio/node.py b/src/mio/node.py
index 92c544d..6ce281b 100755
--- a/src/mio/node.py
+++ b/src/mio/node.py
@@ -9,7 +9,7 @@ import shutil
 import tempfile
 
 from mio.exception import *
-from mio.log import log, declaration, SILENT, NORMAL, VERBOSE
+from mio.log import log, declaration, SILENT, NORMAL, VERBOSE, DEBUG
 
 def parse_boolean(value):
     if value == None:
@@ -49,29 +49,29 @@ class target_node:
     def __hash__(self):
         return self.name.__hash__()
 
-    def trigged(self, prefix, backup, install=False):
+    def trigged(self, prefix, backup, run_pre=False):
+        log(DEBUG, "[%s].trigged %s" % (self.name, run_pre))
         if self.is_trigged == None:
             try:
-                self.is_trigged = self.do_trig(prefix, backup, install)
-                if self.is_trigged:
-                    if install:
-                        self.do_install(prefix, backup)
-                    else:
-                        self.do_test(prefix)
-                    pass
+                self.is_trigged = self.do_trig(prefix, backup, run_pre)
                 pass
             except SystemExit:
                 raise
             except Exception, e:
                 mio.exception.Report(e, self.decl)
+            log(DEBUG, "[%s].trigged %s -> %s" % (self.name, 
+                                                run_pre, self.is_trigged))
         return self.is_trigged
     
     def install(self, prefix, backup):
-        if not self.is_installed and self.trigged(prefix, backup, install=True):
+        log(DEBUG, "[%s].install %s" % (self.name, self.is_installed))
+        if not self.is_installed and self.trigged(prefix, backup):
+            self.do_install(prefix, backup)
             self.is_installed = True
+            log(DEBUG, "[%s].install %s" % (self.name, self.is_installed))
     
     def test(self, prefix, backup):
-        if not self.is_tested and self.trigged(prefix, backup, install=False):
+        if not self.is_tested and self.trigged(prefix, backup):
             self.is_tested = True
     
         
@@ -111,36 +111,38 @@ class group_node(target_node):
     def add_post(self, post):
         self.post.append(post)
 
-    def add_post(self, post):
-        self.post.append(post)
-
-    def do_trig(self, prefix, backup, install):
+    def do_trig(self, prefix, backup, run_pre):
+        log(DEBUG, "[%s].do_trig %s" % (self.name, run_pre))
         result = False
         for d in self.dependency:
-            if d.trigged(prefix, backup, install):
+            if d.trigged(prefix, backup, run_pre):
                 result = True
                 pass
             pass
         for t in self.target:
-            if t.trigged(prefix, backup, install):
+            if t.trigged(prefix, backup, run_pre):
                 result = True
                 pass
             pass
+        log(DEBUG, "[%s].do_trig %s -> %s" % (self.name, run_pre, result))
+        if result and run_pre:
+            for a in self.pre:
+                a.run("pre")
+            
         return result
 
     def do_install(self, prefix, backup):
-#        for d in self.dependency:
-#            d.install(prefix, backup)
-        for a in self.pre:
-            a.run("pre")
+        for d in self.dependency:
+            d.install(prefix, backup)
+        log(DEBUG, "[%s].do_install" % self.name)
         for t in self.target:
             t.install(prefix, backup)
         for a in self.post:
             a.run("post")
 
     def do_test(self, prefix):
-#        for d in self.dependency:
-#            d.test(prefix)
+        for d in self.dependency:
+            d.test(prefix)
         for a in self.pre:
             a.test("pre")
         for t in self.target:
@@ -152,7 +154,7 @@ class rpm_node(target_node):
     def __init__(self, name, target=None, group=None):
         target_node.__init__(self, 'rpm', name, target, group)
 
-    def do_trig(self, prefix, backup, do_pre):
+    def do_trig(self, prefix, backup, run_pre):
         result = False
         try:
             result = self.old_version != self.new_version
@@ -184,11 +186,11 @@ class dir_node(target_node):
         if self.group != other.group:
             raise GroupException(self, other)
     
-    def do_trig(self, prefix, backup, do_pre):
+    def do_trig(self, prefix, backup, run_pre):
         result = False
         self.target = mio.filecache.localpath(prefix, self.decl.name[0])
         self.uid = mio.util.uid(self.owner)
-        self.gid = mio.util.uid(self.group)
+        self.gid = mio.util.gid(self.group)
         
         if not os.path.exists(self.target):
             self.action.append(self.mkdir)
@@ -267,11 +269,12 @@ class file_node(target_node):
         f.close()
         return digest
     
-    def do_trig(self, prefix, backup, do_pre):
+    def do_trig(self, prefix, backup, run_pre):
+        log(DEBUG, "[%s].do_trig %s" % (self.name, run_pre))
         result = False
         self.target = mio.filecache.localpath(prefix, self.decl.name[0])
         self.uid = mio.util.uid(self.owner)
-        self.gid = mio.util.uid(self.group)
+        self.gid = mio.util.gid(self.group)
 
         if self.delete:
             if os.path.exists(self.target):
@@ -327,6 +330,7 @@ class file_node(target_node):
 
 
     def do_install(self, prefix, backup):
+        log(DEBUG, "[%s].do_install" % (self.name))
         for a in self.action:
             try:
                 log(NORMAL, declaration(self), "%s '%s'" %
@@ -348,6 +352,7 @@ class file_node(target_node):
         os.unlink(self.target)
 
     def copy(self, backup):
+        log(DEBUG, "[%s].copy" % (self.name))
         if backup[0] and os.path.exists(self.target):
             backup_name = "%s/%s" % (backup[0], self.decl.name[0])
             if backup[1]:
@@ -419,7 +424,7 @@ class symlink_node(target_node):
         if self.delete != other.delete:
             raise DeleteException(self, other)
     
-    def do_trig(self, prefix, backup, do_pre):
+    def do_trig(self, prefix, backup, run_pre):
         result = False
         self.target = mio.filecache.localpath(prefix, self.decl.name[0])
         
-- 
GitLab