Skip to content

Commit e371cfd

Browse files
committed
✨ - handle ctrl-c
1 parent 1823290 commit e371cfd

File tree

3 files changed

+120
-3
lines changed

3 files changed

+120
-3
lines changed

Cargo.lock

Lines changed: 97 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ serde_json = { version = "1.0.93" }
1111
ahash = "0.8.3"
1212
convert_case = "0.6.0"
1313
rayon = "1.6.1"
14-
log = { version = "0.4.17", features = ["max_level_debug", "release_max_level_warn"] }
14+
log = { version = "0.4.17", features = [
15+
"max_level_debug",
16+
"release_max_level_warn",
17+
] }
1518
env_logger = "0.10.0"
1619
indicatif = "0.17.3"
1720
console = "0.15.5"
@@ -22,6 +25,7 @@ futures = "0.3.25"
2225
futures-timer = "3.0.2"
2326
clap = { version = "4.3.17", features = ["derive"] }
2427
sysinfo = "0.29.10"
28+
ctrlc = "3.4.4"
2529

2630

2731
[profile.release]

src/watcher.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::build;
22
use crate::build::build_types::SourceType;
3+
use crate::build::clean;
34
use crate::cmd;
45
use crate::helpers;
56
use crate::helpers::emojis::*;
@@ -10,6 +11,7 @@ use notify::event::ModifyKind;
1011
use notify::{Config, Error, Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher};
1112
use std::path::PathBuf;
1213
use std::sync::Arc;
14+
use std::sync::Mutex;
1315
use std::time::{Duration, Instant};
1416

1517
#[derive(Debug, Clone, PartialEq, Eq, Copy)]
@@ -52,9 +54,25 @@ async fn async_watch(
5254
) -> notify::Result<()> {
5355
let mut build_state = build::initialize_build(None, filter, path).expect("Can't initialize build");
5456
let mut needs_compile_type = CompileType::Incremental;
57+
// create a mutex to capture if ctrl-c was pressed
58+
let ctrlc_pressed = Arc::new(Mutex::new(false));
59+
let ctrlc_pressed_clone = Arc::clone(&ctrlc_pressed);
60+
61+
ctrlc::set_handler(move || {
62+
let pressed = Arc::clone(&ctrlc_pressed);
63+
let mut pressed = pressed.lock().unwrap();
64+
*pressed = true;
65+
})
66+
.expect("Error setting Ctrl-C handler");
67+
5568
let mut initial_build = true;
5669

5770
loop {
71+
if *ctrlc_pressed_clone.lock().unwrap() {
72+
println!("\nExiting...");
73+
clean::cleanup_after_build(&build_state);
74+
break Ok(());
75+
}
5876
let mut events: Vec<Event> = vec![];
5977
if !q.is_empty() {
6078
// Wait for events to settle

0 commit comments

Comments
 (0)