diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-10-29 14:07:22 +0000 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-10-29 14:07:22 +0000 |
commit | 481608ccad208bd7609aaca182baa12e3ef300eb (patch) | |
tree | 352bd3f45bdaee6a0165e02e542e7700aca5f95e | |
parent | 42c7735d8d4107e3560b97913513ae8fdb96c69d (diff) | |
parent | a0c24350042082fe3e1195f8f6160da363c94843 (diff) | |
download | morph-481608ccad208bd7609aaca182baa12e3ef300eb.tar.gz |
Merge remote-tracking branch 'origin/sam/build-fix-3'
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
-rw-r--r-- | distbuild/build_controller.py | 2 | ||||
-rw-r--r-- | distbuild/initiator.py | 6 | ||||
-rw-r--r-- | distbuild/protocol.py | 19 | ||||
-rw-r--r-- | morphlib/buildcommand.py | 7 | ||||
-rw-r--r-- | morphlib/plugins/distbuild_plugin.py | 21 |
5 files changed, 38 insertions, 17 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 diff --git a/morphlib/buildcommand.py b/morphlib/buildcommand.py index 544d88d8..438badb3 100644 --- a/morphlib/buildcommand.py +++ b/morphlib/buildcommand.py @@ -542,21 +542,18 @@ class InitiatorBuildCommand(BuildCommand): self.app.settings['push-build-branches'] = True super(InitiatorBuildCommand, self).__init__(app) - def build(self, args): + def build(self, repo_name, ref, filename, original_ref=None): '''Initiate a distributed build on a controller''' distbuild.add_crash_conditions(self.app.settings['crash-condition']) - if len(args) != 3: - raise morphlib.Error( - 'Need repo, ref, morphology triplet to build') - if self.addr == '': raise morphlib.Error( 'Need address of controller to run a distbuild') self.app.status(msg='Starting distributed build') loop = distbuild.MainLoop() + args = [repo_name, ref, filename, original_ref or ref] cm = distbuild.InitiatorConnectionMachine(self.app, self.addr, self.port, diff --git a/morphlib/plugins/distbuild_plugin.py b/morphlib/plugins/distbuild_plugin.py index 653eeae8..970205c0 100644 --- a/morphlib/plugins/distbuild_plugin.py +++ b/morphlib/plugins/distbuild_plugin.py @@ -45,7 +45,7 @@ class SerialiseArtifactPlugin(cliapp.Plugin): def enable(self): self.app.add_subcommand('serialise-artifact', self.serialise_artifact, - arg_synopsis='REPO REF MORPHOLOGY') + arg_synopsis='REPO REF MORPHOLOGY [ORIGINAL_REF]') def disable(self): pass @@ -55,13 +55,22 @@ class SerialiseArtifactPlugin(cliapp.Plugin): distbuild.add_crash_conditions(self.app.settings['crash-condition']) - if len(args) != 3: - raise cliapp.AppException('Must get triplet') - - repo_name, ref, morph_name = args + if len(args) not in [3, 4]: + raise cliapp.AppException( + 'This command takes a repo/ref/morph triplet, and optionally ' + 'a ref name.') + + repo_name, ref, morph_name = args[0:3] + + if len(args) == 4: + original_ref = args[3] + else: + original_ref = ref + filename = morphlib.util.sanitise_morphology_path(morph_name) build_command = morphlib.buildcommand.BuildCommand(self.app) - srcpool = build_command.create_source_pool(repo_name, ref, filename) + srcpool = build_command.create_source_pool( + repo_name, ref, filename, original_ref=original_ref) artifact = build_command.resolve_artifacts(srcpool) self.app.output.write(distbuild.serialise_artifact(artifact)) self.app.output.write('\n') |