Skip to content

Commit 31b6083

Browse files
committed
check for job name duplicates
closes #15
1 parent a7c61b9 commit 31b6083

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

src/config.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::cell::Cell;
2+
use std::collections::HashMap;
23
use std::ffi::OsStr;
3-
use std::fs::{remove_dir, remove_dir_all, DirBuilder};
4+
use std::fs::{remove_dir, DirBuilder};
45
use std::path::{Path, PathBuf};
56
use std::process::Command;
67
use std::rc::Rc;
@@ -26,17 +27,19 @@ impl Conf {
2627
pub fn split(self) -> Result<(Defaults, JobMap)> {
2728
self.global.check()?;
2829
let defaults = Rc::new(self.global);
29-
let jobs: Result<JobMap> = self
30-
.job
31-
.into_iter()
32-
.map(|v| {
33-
let name = v.name.clone();
34-
let job = Job::new(v, defaults.clone())?;
35-
Ok((name, job))
36-
})
37-
.collect();
30+
let mut jobs = HashMap::with_capacity(self.job.len());
31+
for job_data in self.job.into_iter() {
32+
let name = job_data.name.clone();
33+
let job = Job::new(job_data, defaults.clone())?;
34+
if let Some(old_job) = jobs.insert(name, job) {
35+
bail!(
36+
"Multiple jobs with the same name '{}' detected!",
37+
old_job.name()
38+
);
39+
}
40+
}
3841

39-
Ok((defaults, jobs?))
42+
Ok((defaults, jobs))
4043
}
4144
}
4245

src/main.rs

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ fn main() -> Result<()> {
7979
// TODO: fail on duplicate job names
8080
let (defaults, mut jobs) = config.split()?;
8181

82+
if defaults.verbose > 1 {
83+
println!("Loaded {} jobs.", jobs.len());
84+
}
85+
8286
match &cli.command {
8387
Commands::Run {
8488
job,

0 commit comments

Comments
 (0)