diff options
-rw-r--r-- | morphlib/buildbranch.py | 16 | ||||
-rw-r--r-- | morphlib/plugins/build_plugin.py | 5 | ||||
-rw-r--r-- | morphlib/plugins/deploy_plugin.py | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/morphlib/buildbranch.py b/morphlib/buildbranch.py index 638350e3..cfc4a67f 100644 --- a/morphlib/buildbranch.py +++ b/morphlib/buildbranch.py @@ -254,6 +254,10 @@ class BuildBranch(object): return self._sb.get_config('branch.name') @property + def root_commit(self): + return self._root.resolve_ref_to_commit(self.root_ref) + + @property def root_local_repo_url(self): return urlparse.urljoin('file://', self._root.dirname) @@ -291,7 +295,13 @@ def pushed_build_branch(bb, loader, changes_need_pushing, name, email, unpushed = any(bb.get_unpushed_branches()) if not changes_made and not unpushed: - yield bb.root_repo_url, bb.root_ref + # We resolve the system branch ref to the commit SHA1 here, so that + # the build uses whatever commit the user's copy of the root repo + # considers the head of that branch to be. If we returned a named + # ref, we risk building what the remote considers the head of that + # branch to be instead, and we also trigger a needless update in + # the cached copy of the root repo. + yield bb.root_repo_url, bb.root_commit, bb.root_ref return def report_inject(gd): @@ -318,6 +328,6 @@ def pushed_build_branch(bb, loader, changes_need_pushing, name, email, remote=remote.get_push_url(), chatty=True) bb.push_build_branches(push_cb=report_push) - yield bb.root_repo_url, bb.root_build_ref + yield bb.root_repo_url, bb.root_build_ref, bb.root_build_ref else: - yield bb.root_local_repo_url, bb.root_build_ref + yield bb.root_local_repo_url, bb.root_build_ref, bb.root_build_ref diff --git a/morphlib/plugins/build_plugin.py b/morphlib/plugins/build_plugin.py index d4f53e2b..218bd819 100644 --- a/morphlib/plugins/build_plugin.py +++ b/morphlib/plugins/build_plugin.py @@ -191,5 +191,6 @@ class BuildPlugin(cliapp.Plugin): bb, loader=loader, changes_need_pushing=push, name=name, email=email, build_uuid=build_uuid, status=self.app.status) - with pbb as (repo, ref): - build_command.build(repo, ref, system_filename) + with pbb as (repo, commit, original_ref): + build_command.build(repo, commit, system_filename, + original_ref=original_ref) diff --git a/morphlib/plugins/deploy_plugin.py b/morphlib/plugins/deploy_plugin.py index 2bc53a0d..e795e637 100644 --- a/morphlib/plugins/deploy_plugin.py +++ b/morphlib/plugins/deploy_plugin.py @@ -328,14 +328,14 @@ class DeployPlugin(cliapp.Plugin): bb, loader=loader, changes_need_pushing=False, name=name, email=email, build_uuid=build_uuid, status=self.app.status) - with pbb as (repo, ref): + with pbb as (repo, commit, original_ref): # Create a tempdir for this deployment to work in deploy_tempdir = tempfile.mkdtemp( dir=os.path.join(self.app.settings['tempdir'], 'deployments')) try: for system in cluster_morphology['systems']: self.deploy_system(build_command, deploy_tempdir, - root_repo_dir, repo, ref, system, + root_repo_dir, repo, commit, system, env_vars, deployments, parent_location='') finally: |