macros: Add loop class for loop functionality

To keep the macro style of the program flow and explicitely state the
command sequence with Macro.add, we need a mechanism that repeats
several steps of the Macro depending on a given condition. This will be
used by the repo checkout logic.

Signed-off-by: Andreas Reichel <andreas.reichel.ext@siemens.com>
This commit is contained in:
Andreas Reichel 2018-09-05 11:13:00 +02:00 committed by Daniel Wagner
parent c7cc57c42f
commit fc9ebf1104

View File

@ -74,6 +74,38 @@ class Command:
pass
class Loop(Command):
"""
A class that defines a set of commands as a loop.
"""
def __init__(self, name):
self.commands = []
self.name = name
def __str__(self):
return self.name
def add(self, command):
"""
Appends commands to the loop.
"""
self.commands.append(command)
def execute(self, ctx):
"""
Executes the loop.
"""
loop_name = str(self)
def executor(command):
command_name = str(command)
logging.debug('Loop %s: execute %s', loop_name, command_name)
return command.execute(ctx)
while all(executor(c) for c in self.commands):
pass
class SetupHome(Command):
"""
Setups the home directory of kas.