Pregunta

¿Cómo puedo iniciar una tarea desde otra tarea llamando a una clase de tarea diferente?

@feature('unites')
@after_method('apply_link')
def make_test_unites(self):
    if getattr(self, 'link_task', None):
        tsk = self.create_task('unites', self.link_task.outputs)
        tsk.a = []

@feature('gtester')
@after_method('apply_link')
def make_test_gtester(self):
    if getattr(self, 'link_task', None):
         tsk = self.create_task('gtester', self.link_task.outputs)

class unites (Task.Task):
    def runnable_status(self):
        ### print("Never reached!")
        ...

    def run(self):
        ...
        ### print("Never reached!")
        ...


class gtester (Task.Task):
     def runnable_status(self):
         //works as expected

     def run(self):
         ...
         bld = self.generator.bld
         ...
         #utask = unites(env=bld.env)
         utask = self.generator.create_task ('unites')
         assert (utask)
         utask.set_inputs(self.generator.link_task.outputs)
         utask.a = ["some foo extra stuff"]
         #bld.add_to_group (utask)

         ### print ("this is definitily reached")

Entonces el código no falla pero cuando lo uso ./waf --zones=task_gen,tasks Todo lo que tengo es una tarea para gtester, pero ninguno para unites.

Así es como se utiliza en la práctica:

test = bld.program(
    features = ['c', 'glib2', 'gtester'],
            ...,
            ...
            )

He tenido una mirada profunda a el libro waf y los documentos API, pero ninguno produjo nada útil.

Entonces, ¿cómo puedo programar una tarea (o cualquier cantidad de tareas) a partir de una tarea que ya se está ejecutando?

¿Fue útil?

Solución

La solución es usar

 tsk = self.generator.create_task('unites')
 bld.producer.outstanding.insert(0, tsk)
 bld.producer.total += 1

y ./waf --zones=tasks muestra las tareas adicionales.


inspirado en el repo de WAF SVN bajo ./waf/playground/dynamic_headers/wscript


Una cosa a mencionar: el recuento de tareas [M/N] delante de cada línea saltará repentinamente cuando se procesa gtester, que se debe al hecho de que el recuento total se actualiza al final de un Task, por lo que WAF no puede saber sobre elNúmero total hasta entonces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top