1
1
use git2:: Repository ;
2
+ use std:: collections:: HashSet ;
2
3
use std:: env;
3
4
use glob:: Pattern ;
4
5
use std:: process:: Command ;
5
6
use std:: time:: Instant ;
6
7
7
- #[ derive( Clone ) ]
8
+ #[ derive( Clone , Debug ) ]
8
9
struct PatternFilter {
9
10
pattern : String ,
10
11
exclude : bool ,
@@ -32,13 +33,18 @@ fn main() {
32
33
let duration = start. elapsed ( ) ;
33
34
println ! ( "Getting changed files done in: {:?}" , duration) ;
34
35
36
+ println ! ( "Changed files: {:?}" , changed_files) ;
37
+
35
38
let start = Instant :: now ( ) ;
36
39
let filtered_files = filter ( changed_files, include_patterns_filters, exclude_patterns_filters) ;
37
40
let duration = start. elapsed ( ) ;
38
41
println ! ( "Filtering files done in: {:?}" , duration) ;
39
42
40
43
let count = get_count ( filtered_files. clone ( ) ) ;
41
44
45
+ println ! ( "Filtered files: {:?}" , filtered_files) ;
46
+ println ! ( "Count: {}" , count) ;
47
+
42
48
Command :: new ( "sh" )
43
49
. arg ( "-c" )
44
50
. arg ( format ! ( "echo \" DIFF_FILES={:?}\" >> $GITHUB_OUTPUT" , filtered_files) )
@@ -53,10 +59,17 @@ fn main() {
53
59
}
54
60
55
61
fn create_patterns_filters ( arg : & str ) -> Vec < PatternFilter > {
56
- let patterns = arg
62
+ let binding = arg
57
63
. split ( '=' )
58
64
. last ( )
59
65
. expect ( "Failed to get patterns" )
66
+ . replace ( " " , "" )
67
+ . replace ( "\n " , "," )
68
+ . replace ( "\r " , "" )
69
+ . replace ( ",," , "," )
70
+ . to_string ( ) ;
71
+
72
+ let patterns = binding
60
73
. split ( ',' )
61
74
. collect :: < Vec < & str > > ( ) ;
62
75
@@ -120,13 +133,16 @@ fn get_changed_files() -> Vec<String> {
120
133
changed_files
121
134
}
122
135
123
- fn filter ( changed_files : Vec < String > , include_patterns_filters : Vec < PatternFilter > , exclude_patterns_filters : Vec < PatternFilter > ) -> Vec < String > {
136
+ fn filter ( changed_files : Vec < String > , include_patterns_filters : Vec < PatternFilter > , exclude_patterns_filters : Vec < PatternFilter > ) -> HashSet < String > {
124
137
let filtered_files: Vec < String > = include_patterns_filters
125
138
. iter ( )
126
139
. flat_map ( |pattern| filter_files_by_pattern ( pattern, & changed_files, & exclude_patterns_filters) )
127
140
. collect ( ) ;
128
141
129
- filtered_files
142
+ let mut hash_set_filtered_files = HashSet :: new ( ) ;
143
+ hash_set_filtered_files. extend ( filtered_files. clone ( ) ) ;
144
+
145
+ hash_set_filtered_files
130
146
}
131
147
132
148
fn filter_files_by_pattern ( pattern_filter : & PatternFilter , files : & Vec < String > , exclude_patterns : & Vec < PatternFilter > ) -> Vec < String > {
@@ -150,7 +166,7 @@ fn filter_files_by_pattern(pattern_filter: &PatternFilter, files: &Vec<String>,
150
166
filtered_files
151
167
}
152
168
153
- fn get_count ( filtered_files : Vec < String > ) -> usize {
169
+ fn get_count ( filtered_files : HashSet < String > ) -> usize {
154
170
filtered_files. len ( )
155
171
}
156
172
0 commit comments