1+ use crate :: project:: { Project , ProjectFile } ;
12use core:: fmt;
23use std:: collections:: HashMap ;
34use std:: collections:: HashSet ;
45use std:: fmt:: Display ;
5- use std:: path:: Path ;
6-
76use std:: path:: PathBuf ;
8- use std:: rc:: Rc ;
9-
10- use crate :: project:: { Project , ProjectFile } ;
7+ use std:: sync:: Arc ;
118
129use error_stack:: Context ;
1310use itertools:: Itertools ;
@@ -20,7 +17,7 @@ use super::file_generator::FileGenerator;
2017use super :: mapper:: { Mapper , OwnerMatcher } ;
2118
2219pub struct Validator {
23- pub project : Rc < Project > ,
20+ pub project : Arc < Project > ,
2421 pub mappers : Vec < Box < dyn Mapper > > ,
2522 pub file_generator : FileGenerator ,
2623}
@@ -76,6 +73,8 @@ impl Validator {
7673 }
7774
7875 fn invalid_team_annotation ( & self , team_names : & HashSet < & String > ) -> Vec < Error > {
76+ let project = self . project . clone ( ) ;
77+
7978 self . project
8079 . files
8180 . par_iter ( )
@@ -84,7 +83,7 @@ impl Validator {
8483 if !team_names. contains ( owner) {
8584 return Some ( Error :: InvalidTeam {
8685 name : owner. clone ( ) ,
87- path : file. path . clone ( ) ,
86+ path : project . relative_path ( & file. path ) . to_owned ( ) ,
8887 } ) ;
8988 }
9089 }
@@ -102,7 +101,7 @@ impl Validator {
102101 if !team_names. contains ( & package. owner ) {
103102 Some ( Error :: InvalidTeam {
104103 name : package. owner . clone ( ) ,
105- path : package. path . clone ( ) ,
104+ path : self . project . relative_path ( & package. path ) . to_owned ( ) ,
106105 } )
107106 } else {
108107 None
@@ -142,20 +141,20 @@ impl Validator {
142141
143142 fn file_to_owners ( & self ) -> Vec < ( & ProjectFile , Vec < Owner > ) > {
144143 let owner_matchers: Vec < OwnerMatcher > = self . mappers . iter ( ) . flat_map ( |mapper| mapper. owner_matchers ( ) ) . collect ( ) ;
144+ let project = self . project . clone ( ) ;
145145
146- let files: Vec < ( & ProjectFile , & Path ) > = self
147- . project
146+ self . project
148147 . files
149- . iter ( )
150- . filter ( |file| !self . project . skip_file ( file) )
151- . map ( |file| ( file, self . project . relative_path ( & file. path ) ) )
152- . collect ( ) ;
153-
154- files
155148 . par_iter ( )
156- . map ( | ( project_file, relative_path ) | {
149+ . filter_map ( | project_file| {
157150 let mut owners_and_source: HashMap < & String , Vec < String > > = HashMap :: new ( ) ;
158151
152+ if project. skip_file ( project_file) {
153+ return None ;
154+ }
155+
156+ let relative_path = project. relative_path ( & project_file. path ) ;
157+
159158 for owner_matcher in & owner_matchers {
160159 let owner = owner_matcher. owner_for ( relative_path) ;
161160
@@ -174,7 +173,7 @@ impl Validator {
174173 } )
175174 . collect_vec ( ) ;
176175
177- ( * project_file, owners)
176+ Some ( ( project_file, owners) )
178177 } )
179178 . collect ( )
180179 }
0 commit comments