refs bug #429
[enigma2.git] / lib / python / Components / Task.py
index 9a7684250008c295087f17516793d911fddd0cfb..86bd233ed261a372d642e869d965cb9b7d02e191 100644 (file)
@@ -127,9 +127,11 @@ class Task(object):
                self.cmd = None
                self.cwd = "/tmp"
                self.args = [ ]
+               self.cmdline = None
                self.task_progress_changed = None
                self.output_line = ""
                job.addTask(self)
+               self.container = None
 
        def setCommandline(self, cmd, args):
                self.cmd = cmd
@@ -141,6 +143,9 @@ class Task(object):
                self.global_preconditions.append(ToolExistsPrecondition())
                self.postconditions.append(ReturncodePostcondition())
 
+       def setCmdline(self, cmdline):
+               self.cmdline = cmdline
+
        def checkPreconditions(self, immediate = False):
                not_met = [ ]
                if immediate:
@@ -166,13 +171,15 @@ class Task(object):
                self.container.stdoutAvail.append(self.processStdout)
                self.container.stderrAvail.append(self.processStderr)
 
-               assert self.cmd is not None
-               assert len(self.args) >= 1
-
                if self.cwd is not None:
                        self.container.setCWD(self.cwd)
 
-               print "execute:", self.container.execute(self.cmd, *self.args), self.cmd, self.args
+               if not self.cmd and self.cmdline:
+                       print "execute:", self.container.execute(self.cmdline), self.cmdline
+               else:
+                       assert self.cmd is not None
+                       assert len(self.args) >= 1
+                       print "execute:", self.container.execute(self.cmd, *self.args), ' '.join(self.args)
                if self.initial_input:
                        self.writeInput(self.initial_input)
 
@@ -205,7 +212,8 @@ class Task(object):
                self.finish()
 
        def abort(self):
-               self.container.kill()
+               if self.container:
+                       self.container.kill()
                self.finish(aborted = True)
 
        def finish(self, aborted = False):
@@ -362,12 +370,14 @@ class DiskspacePrecondition(Condition):
 class ToolExistsPrecondition(Condition):
        def check(self, task):
                import os
-               if task.cmd[0]=='/':
-                       realpath = task.cmd
-               else:
-                       realpath = task.cwd + '/' + task.cmd
-               self.realpath = realpath
-               return os.access(realpath, os.X_OK)
+               
+               self.realpath = task.cmd
+               path = os.environ.get('PATH', '').split(os.pathsep)
+               absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path))
+               if len(absolutes) > 0:
+                       self.realpath = task.cmd[0]
+                       return True
+               return False 
 
        def getErrorMessage(self, task):
                return _("A required tool (%s) was not found.") % (self.realpath)