From 01bc599d7e44c7fd606296312a1fdb9584dbaa60 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Thu, 11 Feb 2021 14:49:43 +0100 Subject: Fix: Check whether package depends on itself, abort if it does Signed-off-by: Matthias Beyer Tested-by: Matthias Beyer --- src/orchestrator/orchestrator.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/orchestrator/orchestrator.rs') 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::>>(); - + .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::>>>()?; + + trace!("{:?} is depending on {}", depending_on_job, job.1.jobdef.job.uuid()); if depending_on_job.is_empty() { None } else { -- cgit v1.2.3