Add watch option
This commit is contained in:
parent
3f8cdc4aee
commit
68f1b9e217
|
@ -12,6 +12,7 @@ percent-encoding = "1.0.1"
|
|||
hyper = "0.12.10"
|
||||
log = "0.4.6"
|
||||
beautylog = "0.1.0"
|
||||
notify = "4.0.10"
|
||||
|
||||
[[bin]]
|
||||
name = "mars-server"
|
||||
|
|
34
src/lib.rs
34
src/lib.rs
|
@ -1,7 +1,14 @@
|
|||
use std::io;
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
use std::{io, thread};
|
||||
use std::process::{Command, ExitStatus};
|
||||
use std::path::PathBuf;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::fs::{File, create_dir_all};
|
||||
use std::sync::mpsc::channel;
|
||||
use std::time::Duration;
|
||||
|
||||
use notify::{Watcher, RecursiveMode, DebouncedEvent, watcher};
|
||||
|
||||
use notify_rust::Notification;
|
||||
|
||||
|
@ -100,6 +107,29 @@ pub fn builder_arguments_from_string(uri: &str) -> (PathBuf, Vec<String>) {
|
|||
(path, args)
|
||||
}
|
||||
|
||||
/// Watches a directory and builds it when a modification occurs.
|
||||
pub fn watch<P: AsRef<Path>>(p: P) -> Result<(), Error> {
|
||||
let path = PathBuf::from(p.as_ref());
|
||||
thread::spawn(move || {
|
||||
let (tx, rx) = channel();
|
||||
let mut watcher = watcher(tx, Duration::from_secs(10)).unwrap();
|
||||
watcher.watch(&path, RecursiveMode::Recursive).unwrap();
|
||||
|
||||
loop {
|
||||
match rx.recv() {
|
||||
Ok(DebouncedEvent::NoticeWrite(_)) => {
|
||||
let builder = GeneralBuilder::new();
|
||||
builder.build(&path, &vec![]).ok();
|
||||
},
|
||||
Err(e) => error!("watch error: {:?}", e),
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// A general builders that contains many builders and can build any type of code.
|
||||
pub struct GeneralBuilder {
|
||||
/// The path to the success icon.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
use std::thread;
|
||||
use std::{thread, env};
|
||||
use std::sync::{Mutex, Arc, mpsc};
|
||||
|
||||
use colored::*;
|
||||
|
@ -12,12 +12,20 @@ use hyper::{Body, Response, Server};
|
|||
use hyper::service::service_fn_ok;
|
||||
use hyper::rt::Future;
|
||||
|
||||
use mars::{GeneralBuilder, builder_arguments_from_string};
|
||||
use mars::{GeneralBuilder, builder_arguments_from_string, watch};
|
||||
|
||||
fn main() {
|
||||
|
||||
beautylog::init(log::LevelFilter::Info).ok();
|
||||
|
||||
let args = env::args().collect::<Vec<_>>();
|
||||
|
||||
if args.len() == 3 && args[1] == "-w" {
|
||||
if let Err(e) = watch(&args[2]) {
|
||||
error!("{:?}", e);
|
||||
}
|
||||
}
|
||||
|
||||
let (tx, rx) = mpsc::channel();
|
||||
|
||||
let tasks = Arc::new(Mutex::new(vec![]));
|
||||
|
|
Loading…
Reference in New Issue