From f1626ac35ef0c8359e4a342a564a3365d96bce1c Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 11 Nov 2020 17:04:11 +0100 Subject: Copy package source to container before running build Signed-off-by: Matthias Beyer --- src/job/runnable.rs | 12 +++++++++++- src/job/set.rs | 5 +++-- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src/job') diff --git a/src/job/runnable.rs b/src/job/runnable.rs index 6b26d43..066d434 100644 --- a/src/job/runnable.rs +++ b/src/job/runnable.rs @@ -12,6 +12,8 @@ use crate::package::Package; use crate::package::ParseDependency; use crate::package::Script; use crate::package::ScriptBuilder; +use crate::source::SourceCache; +use crate::source::SourceEntry; use crate::util::docker::ImageName; /// A job configuration that can be run. All inputs are clear here. @@ -26,6 +28,9 @@ pub struct RunnableJob { #[getset(get = "pub")] image: ImageName, + #[getset(get = "pub")] + source_cache: SourceCache, + #[getset(get = "pub")] script: Script, @@ -34,7 +39,7 @@ pub struct RunnableJob { } impl RunnableJob { - pub fn build_from_job(job: Job, merged_stores: &MergedStores) -> Result { + pub fn build_from_job(job: Job, merged_stores: &MergedStores, source_cache: &SourceCache) -> Result { let script = ScriptBuilder::new(&job.script_shebang) .build(&job.package, &job.script_phases)?; @@ -60,12 +65,17 @@ impl RunnableJob { package: job.package, image: job.image, resources: job.resources.into_iter().chain(resources.into_iter()).collect(), + source_cache: source_cache.clone(), script, }) } + pub fn package_source(&self) -> SourceEntry { + self.source_cache.source_for(&self.package()) + } + fn build_resource(dep: &dyn ParseDependency, merged_stores: &MergedStores) -> Result { let (name, vers) = dep.parse_as_name_and_version()?; trace!("Copying dep: {:?} {:?}", name, vers); diff --git a/src/job/set.rs b/src/job/set.rs index 375db08..58bf7ce 100644 --- a/src/job/set.rs +++ b/src/job/set.rs @@ -5,6 +5,7 @@ use crate::job::Job; use crate::job::RunnableJob; use crate::package::Tree; use crate::phase::PhaseName; +use crate::source::SourceCache; use crate::util::docker::ImageName; /// A set of jobs that could theoretically be run in parallel @@ -22,8 +23,8 @@ impl JobSet { self.set.is_empty() } - pub fn into_runables<'a>(self, merged_stores: &'a MergedStores) -> impl Iterator> + 'a { - self.set.into_iter().map(move |j| RunnableJob::build_from_job(j, merged_stores)) + pub fn into_runables<'a>(self, merged_stores: &'a MergedStores, source_cache: &'a SourceCache) -> impl Iterator> + 'a { + self.set.into_iter().map(move |j| RunnableJob::build_from_job(j, merged_stores, source_cache)) } pub fn len(&self) -> usize { -- cgit v1.2.3