diff options
Diffstat (limited to 'distbuild')
-rw-r--r-- | distbuild/build_controller.py | 2 | ||||
-rw-r--r-- | distbuild/initiator.py | 6 | ||||
-rw-r--r-- | distbuild/protocol.py | 19 |
3 files changed, 21 insertions, 6 deletions
diff --git a/distbuild/build_controller.py b/distbuild/build_controller.py index 93f97fac..387b410f 100644 --- a/distbuild/build_controller.py +++ b/distbuild/build_controller.py @@ -258,6 +258,8 @@ class BuildController(distbuild.StateMachine): self._request['ref'], self._request['morphology'], ] + if 'original_ref' in self._request: + argv.append(self._request['original_ref']) msg = distbuild.message('exec-request', id=self._idgen.next(), argv=argv, diff --git a/distbuild/initiator.py b/distbuild/initiator.py index b0993aa3..70b26c1e 100644 --- a/distbuild/initiator.py +++ b/distbuild/initiator.py @@ -39,7 +39,7 @@ class _Failed(object): class Initiator(distbuild.StateMachine): - def __init__(self, cm, conn, app, repo_name, ref, morphology): + def __init__(self, cm, conn, app, repo_name, ref, morphology, original_ref): distbuild.StateMachine.__init__(self, 'waiting') self._cm = cm self._conn = conn @@ -47,6 +47,7 @@ class Initiator(distbuild.StateMachine): self._repo_name = repo_name self._ref = ref self._morphology = morphology + self._original_ref = original_ref self._steps = None self._step_outputs = {} self._step_output_dir = app.settings['initiator-step-output-dir'] @@ -80,7 +81,8 @@ class Initiator(distbuild.StateMachine): id=random_id, repo=self._repo_name, ref=self._ref, - morphology=self._morphology + morphology=self._morphology, + original_ref=self._original_ref ) self._jm.send(msg) logging.debug('Initiator: sent to controller: %s', repr(msg)) diff --git a/distbuild/protocol.py b/distbuild/protocol.py index d5dfe2b7..ffce1fe7 100644 --- a/distbuild/protocol.py +++ b/distbuild/protocol.py @@ -19,7 +19,7 @@ '''Construct protocol message objects (dicts).''' -_types = { +_required_fields = { 'build-request': [ 'id', 'repo', @@ -84,15 +84,26 @@ _types = { } +_optional_fields = { + 'build-request': [ + 'original_ref' + ] +} + + def message(message_type, **kwargs): - assert message_type in _types - required_fields = _types[message_type] + known_types = _required_fields.keys() + assert message_type in known_types + + required_fields = _required_fields[message_type] + optional_fields = _optional_fields.get(message_type, []) for name in required_fields: assert name in kwargs, 'field %s is required' % name for name in kwargs: - assert name in required_fields, 'field %s is not allowed' % name + assert (name in required_fields or name in optional_fields), \ + 'field %s is not allowed' % name msg = dict(kwargs) msg['type'] = message_type |