Skip to content

Commit 6a23a3a

Browse files
committed
implement return values depending on query parsing result and any errors reading directories
1 parent df6f6cd commit 6a23a3a

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/main.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ fn main() {
120120
first_arg = args[0].to_ascii_lowercase();
121121
}
122122

123+
let mut exit_value = None::<i32>;
124+
123125
if interactive {
124126
let mut rl = Editor::<()>::new();
125127
loop {
@@ -146,13 +148,17 @@ fn main() {
146148
}
147149
} else {
148150
let query = args.join(" ");
149-
exec_search(query, &config, no_color);
151+
exit_value = Some(exec_search(query, &config, no_color));
150152
}
151153

152154
config.save();
155+
156+
if let Some(exit_value) = exit_value {
157+
std::process::exit(exit_value);
158+
}
153159
}
154160

155-
fn exec_search(query: String, config: &Config, no_color: bool) {
161+
fn exec_search(query: String, config: &Config, no_color: bool) -> i32 {
156162
let mut p = Parser::new();
157163
let query = p.parse(&query, config.debug);
158164

@@ -166,9 +172,15 @@ fn exec_search(query: String, config: &Config, no_color: bool) {
166172
let use_colors = !no_color && is_terminal;
167173

168174
let mut searcher = Searcher::new(query, config.clone(), use_colors);
169-
searcher.list_search_results().unwrap()
175+
searcher.list_search_results().unwrap();
176+
177+
let error_count = searcher.error_count;
178+
match error_count {
179+
0 => 0,
180+
_ => 1
181+
}
170182
},
171-
Err(err) => error_message("query", &err)
183+
Err(err) => { error_message("query", &err); 2 }
172184
}
173185
}
174186

src/searcher.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ pub struct Searcher {
8787

8888
file_exif_metadata: Option<HashMap<String, String>>,
8989
file_exif_metadata_set: bool,
90+
91+
pub error_count: i32,
9092
}
9193

9294
impl Searcher {
@@ -129,6 +131,8 @@ impl Searcher {
129131

130132
file_exif_metadata: None,
131133
file_exif_metadata_set: false,
134+
135+
error_count: 0,
132136
}
133137
}
134138

@@ -219,7 +223,10 @@ impl Searcher {
219223
}
220224
}
221225
},
222-
Err(e) => path_error_message(&path, e)
226+
Err(e) => {
227+
self.error_count += 1;
228+
path_error_message(&path, e)
229+
}
223230
}
224231
}
225232

@@ -492,6 +499,7 @@ impl Searcher {
492499
let canonical_path = crate::util::canonical_path(&dir.to_path_buf());
493500

494501
if canonical_path.is_err() {
502+
self.error_count += 1;
495503
error_message(&dir.to_string_lossy(), String::from("could not canonicalize path: ").add(canonical_path.err().unwrap().as_str()).as_str());
496504
return Ok(());
497505
}
@@ -594,6 +602,7 @@ impl Searcher {
594602
false);
595603

596604
if result.is_err() {
605+
self.error_count += 1;
597606
path_error_message(&path, result.err().unwrap());
598607
}
599608
} else {
@@ -602,18 +611,21 @@ impl Searcher {
602611
}
603612
}
604613
} else {
614+
self.error_count += 1;
605615
path_error_message(&path, result.err().unwrap());
606616
}
607617
}
608618
}
609619
},
610620
Err(err) => {
621+
self.error_count += 1;
611622
path_error_message(dir, err);
612623
}
613624
}
614625
}
615626
},
616627
Err(err) => {
628+
self.error_count += 1;
617629
path_error_message(dir, err);
618630
}
619631
}
@@ -634,6 +646,7 @@ impl Searcher {
634646
false);
635647

636648
if result.is_err() {
649+
self.error_count += 1;
637650
path_error_message(&path, result.err().unwrap());
638651
}
639652
}

0 commit comments

Comments
 (0)