@@ -15,14 +15,15 @@ enum PubKind {
15
15
Private ,
16
16
}
17
17
18
- fn process ( cmd : & str , p : & Path ) {
18
+ fn process ( cmd : & str , p : & Path ) -> u64 {
19
19
let pub_regex = RegexBuilder :: new ( "pub(?:\\ s*\\ (\\ s*(.*?)\\ s*\\ ))?" )
20
20
. multi_line ( true )
21
21
. build ( )
22
22
. unwrap ( ) ;
23
23
let mut cur_txt = read_to_string ( p) . unwrap ( ) ;
24
24
let mut i = 0 ;
25
25
let mut cl = pub_regex. capture_locations ( ) ;
26
+ let mut num_changed = 0 ;
26
27
while i < cur_txt. len ( ) {
27
28
print ! ( "." ) ;
28
29
stdout ( ) . flush ( ) . ok ( ) ;
@@ -66,6 +67,7 @@ fn process(cmd: &str, p: &Path) {
66
67
. status ( )
67
68
{
68
69
Ok ( s) if s. success ( ) => {
70
+ num_changed += 1 ;
69
71
next_txt = try_txt;
70
72
}
71
73
_ => break ,
@@ -80,6 +82,7 @@ fn process(cmd: &str, p: &Path) {
80
82
}
81
83
}
82
84
write ( p, cur_txt) . unwrap ( ) ;
85
+ num_changed
83
86
}
84
87
85
88
fn progname ( ) -> String {
@@ -113,10 +116,23 @@ fn main() {
113
116
}
114
117
115
118
let cmd_str = matches. opt_str ( "c" ) . unwrap ( ) ;
116
- for p in matches. free {
117
- print ! ( "{}: " , p) ;
118
- stdout ( ) . flush ( ) . ok ( ) ;
119
- process ( cmd_str. as_str ( ) , & Path :: new ( & p) ) ;
120
- println ! ( "" ) ;
119
+ let mut round = 1 ;
120
+ loop {
121
+ println ! ( "===> Round {}" , round) ;
122
+ let mut changed = false ;
123
+ for p in & matches. free {
124
+ print ! ( "{}: " , p) ;
125
+ stdout ( ) . flush ( ) . ok ( ) ;
126
+ let num_changed = process ( cmd_str. as_str ( ) , & Path :: new ( & p) ) ;
127
+ if num_changed > 0 {
128
+ print ! ( " ({} elements depub'ed)" , num_changed) ;
129
+ changed = true ;
130
+ }
131
+ println ! ( "" ) ;
132
+ }
133
+ if !changed {
134
+ break ;
135
+ }
136
+ round += 1 ;
121
137
}
122
138
}
0 commit comments