summaryrefslogtreecommitdiffstats
path: root/src/orchestrator/orchestrator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/orchestrator/orchestrator.rs')
-rw-r--r--src/orchestrator/orchestrator.rs17
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 {