mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-23 22:25:26 +00:00
Eliminate extra thread for VfsWatcher
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::thread;
|
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
use rand;
|
use rand;
|
||||||
@@ -100,15 +99,8 @@ pub fn serve(project_path: &PathBuf, verbose: bool, port: Option<u64>) {
|
|||||||
Arc::new(Mutex::new(vfs))
|
Arc::new(Mutex::new(vfs))
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
|
||||||
let vfs = vfs.clone();
|
|
||||||
|
|
||||||
thread::spawn(move || {
|
|
||||||
VfsWatcher::new(vfs).start();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
println!("Server listening on port {}", web_config.port);
|
println!("Server listening on port {}", web_config.port);
|
||||||
|
|
||||||
|
VfsWatcher::new(vfs.clone()).start();
|
||||||
web::start(web_config, project.clone(), &PLUGIN_CHAIN, vfs.clone());
|
web::start(web_config, project.clone(), &PLUGIN_CHAIN, vfs.clone());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,71 +23,65 @@ impl VfsWatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn start(mut self) {
|
pub fn start(mut self) {
|
||||||
{
|
let outer_vfs = self.vfs.lock().unwrap();
|
||||||
let outer_vfs = self.vfs.lock().unwrap();
|
|
||||||
|
|
||||||
for (partition_name, root_path) in &outer_vfs.partitions {
|
for (partition_name, root_path) in &outer_vfs.partitions {
|
||||||
let (tx, rx) = mpsc::channel();
|
let (tx, rx) = mpsc::channel();
|
||||||
let partition_name = partition_name.clone();
|
let partition_name = partition_name.clone();
|
||||||
let root_path = root_path.clone();
|
let root_path = root_path.clone();
|
||||||
|
|
||||||
let mut watcher: RecommendedWatcher = Watcher::new(tx, Duration::from_secs(1))
|
let mut watcher: RecommendedWatcher = Watcher::new(tx, Duration::from_secs(1))
|
||||||
.expect("Unable to create watcher!");
|
.expect("Unable to create watcher!");
|
||||||
|
|
||||||
watcher
|
watcher
|
||||||
.watch(&root_path, RecursiveMode::Recursive)
|
.watch(&root_path, RecursiveMode::Recursive)
|
||||||
.expect("Unable to watch path!");
|
.expect("Unable to watch path!");
|
||||||
|
|
||||||
self.watchers.push(watcher);
|
self.watchers.push(watcher);
|
||||||
|
|
||||||
{
|
{
|
||||||
let vfs = self.vfs.clone();
|
let vfs = self.vfs.clone();
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
loop {
|
loop {
|
||||||
let event = rx.recv().unwrap();
|
let event = rx.recv().unwrap();
|
||||||
let mut vfs = vfs.lock().unwrap();
|
let mut vfs = vfs.lock().unwrap();
|
||||||
let current_time = vfs.current_time();
|
let current_time = vfs.current_time();
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
DebouncedEvent::Write(ref change_path) |
|
DebouncedEvent::Write(ref change_path) |
|
||||||
DebouncedEvent::Create(ref change_path) |
|
DebouncedEvent::Create(ref change_path) |
|
||||||
DebouncedEvent::Remove(ref change_path) => {
|
DebouncedEvent::Remove(ref change_path) => {
|
||||||
if let Some(mut route) = path_to_route(&root_path, change_path) {
|
if let Some(mut route) = path_to_route(&root_path, change_path) {
|
||||||
route.insert(0, partition_name.clone());
|
route.insert(0, partition_name.clone());
|
||||||
|
|
||||||
vfs.add_change(current_time, route);
|
vfs.add_change(current_time, route);
|
||||||
} else {
|
} else {
|
||||||
println!("Failed to get route from {}", change_path.display());
|
println!("Failed to get route from {}", change_path.display());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
DebouncedEvent::Rename(ref from_change, ref to_change) => {
|
DebouncedEvent::Rename(ref from_change, ref to_change) => {
|
||||||
if let Some(mut route) = path_to_route(&root_path, from_change) {
|
if let Some(mut route) = path_to_route(&root_path, from_change) {
|
||||||
route.insert(0, partition_name.clone());
|
route.insert(0, partition_name.clone());
|
||||||
|
|
||||||
vfs.add_change(current_time, route);
|
vfs.add_change(current_time, route);
|
||||||
} else {
|
} else {
|
||||||
println!("Failed to get route from {}", from_change.display());
|
println!("Failed to get route from {}", from_change.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(mut route) = path_to_route(&root_path, to_change) {
|
if let Some(mut route) = path_to_route(&root_path, to_change) {
|
||||||
route.insert(0, partition_name.clone());
|
route.insert(0, partition_name.clone());
|
||||||
|
|
||||||
vfs.add_change(current_time, route);
|
vfs.add_change(current_time, route);
|
||||||
} else {
|
} else {
|
||||||
println!("Failed to get route from {}", to_change.display());
|
println!("Failed to get route from {}", to_change.display());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
|
||||||
thread::park();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user