diff options
-rwxr-xr-x | morphlib/app.py | 4 | ||||
-rw-r--r-- | morphlib/buildcommand.py | 1 | ||||
-rw-r--r-- | morphlib/plugins/branch_and_merge_plugin.py | 9 | ||||
-rwxr-xr-x | tests.as-root/build-with-push.script | 39 |
4 files changed, 49 insertions, 4 deletions
diff --git a/morphlib/app.py b/morphlib/app.py index 8769b41c..0a11c716 100755 --- a/morphlib/app.py +++ b/morphlib/app.py @@ -139,6 +139,10 @@ class Morph(cliapp.Application): 'build chunks with prefix PREFIX', metavar='PREFIX', default=defaults['prefix'], group=group_build) + self.settings.boolean(['push-build-branches'], + 'always push temporary build branches to the ' + 'remote repository', + group=group_build) self.settings.boolean(['staging-chroot'], 'build things in an isolated chroot ' '(default: true)', diff --git a/morphlib/buildcommand.py b/morphlib/buildcommand.py index aa6c7d0e..95f3812e 100644 --- a/morphlib/buildcommand.py +++ b/morphlib/buildcommand.py @@ -38,6 +38,7 @@ class BuildCommand(object): self.ckc = self.new_cache_key_computer(self.build_env) self.lac, self.rac = self.new_artifact_caches() self.lrc, self.rrc = self.new_repo_caches() + self.supports_local_build = True def build(self, args): '''Build triplets specified on command line.''' diff --git a/morphlib/plugins/branch_and_merge_plugin.py b/morphlib/plugins/branch_and_merge_plugin.py index 1e2f381d..161b2b4d 100644 --- a/morphlib/plugins/branch_and_merge_plugin.py +++ b/morphlib/plugins/branch_and_merge_plugin.py @@ -1116,7 +1116,6 @@ class BranchAndMergePlugin(cliapp.Plugin): 'parameter: the system to build') system_name = args[0] - push = False # Deduce workspace and system branch and branch root repository. workspace = self.deduce_workspace() @@ -1127,6 +1126,11 @@ class BranchAndMergePlugin(cliapp.Plugin): # Generate a UUID for the build. build_uuid = uuid.uuid4().hex + build_command = morphlib.buildcommand.BuildCommand(self.app) + build_command = self.app.hookmgr.call('new-build-command', + build_command) + push = self.app.settings['push-build-branches'] + self.app.status(msg='Starting build %(uuid)s', uuid=build_uuid) self.app.status(msg='Collecting morphologies involved in ' @@ -1154,9 +1158,6 @@ class BranchAndMergePlugin(cliapp.Plugin): build_branch_root = urlparse.urljoin('file://', dirname) # Run the build. - build_command = morphlib.buildcommand.BuildCommand(self.app) - build_command = self.app.hookmgr.call('new-build-command', - build_command) build_command.build([build_branch_root, build_repos[branch_root]['build-ref'], system_name]) diff --git a/tests.as-root/build-with-push.script b/tests.as-root/build-with-push.script new file mode 100755 index 00000000..1c3fb3fd --- /dev/null +++ b/tests.as-root/build-with-push.script @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright (C) 2012 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Test 'morph build' when build without push is disabled, i.e. everything is +# built from the remote repositories instead of the local checkouts. + +set -eu + +# Disable test on versions of Python before 2.7. +if ! python --version 2>&1 | grep '^Python 2\.[78]' > /dev/null +then + cat "$SRCDIR/tests.as-root/build-with-push.stdout" + exit 0 +fi + +source "$SRCDIR/tests.as-root/setup-build" + +cd "$DATADIR/workspace/branch1" +"$SRCDIR/scripts/test-morph" --push-build-branches build linux-system + +# Test that the chunk was built from test:kernel-repo and not a local branch +cd "$DATADIR/cache/artifacts" +tar xf *.chunk.linux baserock/linux.meta +grep -q "\"repo\": \"file://$DATADIR/kernel-repo\"" baserock/linux.meta + + |