diff --git a/src/mio/installer.py b/src/mio/installer.py index ea472d4125bb2d1c91d3d05f5aba5261ed6268dc..8400771533e82ed3e446a86e842ea8c9ac7db94d 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 e1d7e7cbb611615946fd0235e450557281cd826f..ee95adef8c62dcebe81de8fd01d25aa397c8690d 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 92c544d452bb74907277b4060505a29684735360..6ce281b0c47c79b35dbc1a3af0ff8f6671d1fbd4 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])