1- use super :: types:: Tag ;
1+ use super :: {
2+ smart_iter:: SmartIter ,
3+ types:: { CodeownersEntryMatcher , Tag } ,
4+ } ;
25use crate :: utils:: error:: { Error , Result } ;
36use ignore:: overrides:: { Override , OverrideBuilder } ;
47
5- use std:: path:: Path ;
8+ use std:: { path:: Path , time :: Instant } ;
69
710use super :: types:: { CodeownersEntry , Owner } ;
811
912/// Find both owners and tags for a specific file based on all parsed CODEOWNERS entries
1013pub fn find_owners_and_tags_for_file (
11- file_path : & Path , entries : & [ CodeownersEntry ] ,
14+ file_path : & Path , entries : & [ CodeownersEntryMatcher ] ,
1215) -> Result < ( Vec < Owner > , Vec < Tag > ) > {
1316 // Early return if no entries
1417 if entries. is_empty ( ) {
1518 return Ok ( ( Vec :: new ( ) , Vec :: new ( ) ) ) ;
1619 }
17- let target_dir = file_path. parent ( ) . ok_or_else ( || {
18- std:: io:: Error :: new (
19- std:: io:: ErrorKind :: InvalidInput ,
20- "file path has no parent directory" ,
21- )
22- } ) ?;
20+
21+ let target_dir = file_path
22+ . parent ( )
23+ . ok_or_else ( || Error :: new ( "file path has no parent directory" ) ) ?;
2324
2425 let mut candidates: Vec < _ > = entries
2526 . iter ( )
@@ -45,31 +46,15 @@ pub fn find_owners_and_tags_for_file(
4546 Ok ( p) => p,
4647 Err ( _) => return None , // Should not happen due to starts_with check
4748 } ;
49+
4850 let depth = rel_path. components ( ) . count ( ) ;
4951
5052 // Check if the pattern matches the target file
5153 let matches = {
52- let mut builder = OverrideBuilder :: new ( codeowners_dir) ;
53- if let Err ( e) = builder. add ( & entry. pattern ) {
54- eprintln ! (
55- "Invalid pattern '{}' in {}: {}" ,
56- entry. pattern,
57- entry. source_file. display( ) ,
58- e
59- ) ;
60- return None ;
61- }
62- let over: Override = match builder. build ( ) {
63- Ok ( o) => o,
64- Err ( e) => {
65- eprintln ! (
66- "Failed to build override for pattern '{}': {}" ,
67- entry. pattern, e
68- ) ;
69- return None ;
70- }
71- } ;
72- over. matched ( file_path, false ) . is_whitelist ( )
54+ entry
55+ . override_matcher
56+ . matched ( file_path, false )
57+ . is_whitelist ( )
7358 } ;
7459
7560 if matches { Some ( ( entry, depth) ) } else { None }
0 commit comments