diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-02-11 14:49:43 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-02-11 17:20:59 +0100 |
commit | 01bc599d7e44c7fd606296312a1fdb9584dbaa60 (patch) | |
tree | 9891572a2b94ab032bd33caf8381d709d230678b /src/orchestrator/orchestrator.rs | |
parent | 269afd5d42294c2f80419d1def06b6730e312a14 (diff) |
Fix: Check whether package depends on itself, abort if it does
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Tested-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/orchestrator/orchestrator.rs')
-rw-r--r-- | src/orchestrator/orchestrator.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/orchestrator/orchestrator.rs b/src/orchestrator/orchestrator.rs index 710b53f..7ed81fd 100644 --- a/src/orchestrator/orchestrator.rs +++ b/src/orchestrator/orchestrator.rs @@ -19,6 +19,7 @@ use anyhow::Result; use anyhow::anyhow; use diesel::PgConnection; use indicatif::ProgressBar; +use itertools::Itertools; use log::debug; use log::trace; use tokio::sync::RwLock; @@ -276,9 +277,19 @@ impl<'a> Orchestrator<'a> { *job.3.borrow_mut() = { let depending_on_job = jobs.iter() .filter(|j| j.1.jobdef.dependencies.contains(job.1.jobdef.job.uuid())) - .map(|j| j.2.clone()) - .collect::<Vec<Sender<JobResult>>>(); - + .map(|j| { + if j.1.jobdef.job.uuid() == job.1.jobdef.job.uuid() { + Err(anyhow!("Package does depend on itself: {} {}", + job.1.jobdef.job.package().name(), + job.1.jobdef.job.package().version())) + } else { + Ok(j) + } + }) + .map_ok(|j| j.2.clone()) + .collect::<Result<Vec<Sender<JobResult>>>>()?; + + trace!("{:?} is depending on {}", depending_on_job, job.1.jobdef.job.uuid()); if depending_on_job.is_empty() { None } else { |