File tree 2 files changed +18
-11
lines changed
2 files changed +18
-11
lines changed Original file line number Diff line number Diff line change 1
1
use std:: cell:: Cell ;
2
+ use std:: collections:: HashMap ;
2
3
use std:: ffi:: OsStr ;
3
- use std:: fs:: { remove_dir, remove_dir_all , DirBuilder } ;
4
+ use std:: fs:: { remove_dir, DirBuilder } ;
4
5
use std:: path:: { Path , PathBuf } ;
5
6
use std:: process:: Command ;
6
7
use std:: rc:: Rc ;
@@ -26,17 +27,19 @@ impl Conf {
26
27
pub fn split ( self ) -> Result < ( Defaults , JobMap ) > {
27
28
self . global . check ( ) ?;
28
29
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
+ }
38
41
39
- Ok ( ( defaults, jobs? ) )
42
+ Ok ( ( defaults, jobs) )
40
43
}
41
44
}
42
45
Original file line number Diff line number Diff line change @@ -79,6 +79,10 @@ fn main() -> Result<()> {
79
79
// TODO: fail on duplicate job names
80
80
let ( defaults, mut jobs) = config. split ( ) ?;
81
81
82
+ if defaults. verbose > 1 {
83
+ println ! ( "Loaded {} jobs." , jobs. len( ) ) ;
84
+ }
85
+
82
86
match & cli. command {
83
87
Commands :: Run {
84
88
job,
You can’t perform that action at this time.
0 commit comments