Works but needs modifications

This commit is contained in:
Thomas Forgione 2019-04-02 14:18:10 +02:00
parent 68f1b9e217
commit 52ef41b9aa
No known key found for this signature in database
GPG Key ID: 203DAEA747F48F41
1 changed files with 24 additions and 6 deletions

View File

@ -2,13 +2,16 @@
extern crate log; extern crate log;
use std::{io, thread}; use std::{io, thread};
use std::env::current_dir;
use std::process::{Command, ExitStatus}; use std::process::{Command, ExitStatus};
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::fs::{File, create_dir_all}; use std::fs::{File, create_dir_all};
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
use std::time::Duration; use std::time::Duration;
use notify::{Watcher, RecursiveMode, DebouncedEvent, watcher}; use colored::*;
use notify::{Watcher, RecursiveMode, watcher};
use notify_rust::Notification; use notify_rust::Notification;
@ -109,20 +112,35 @@ pub fn builder_arguments_from_string(uri: &str) -> (PathBuf, Vec<String>) {
/// Watches a directory and builds it when a modification occurs. /// Watches a directory and builds it when a modification occurs.
pub fn watch<P: AsRef<Path>>(p: P) -> Result<(), Error> { pub fn watch<P: AsRef<Path>>(p: P) -> Result<(), Error> {
let path = PathBuf::from(p.as_ref()); let mut path = current_dir()?;
path.push(p.as_ref());
thread::spawn(move || { thread::spawn(move || {
let (tx, rx) = channel(); let (tx, rx) = channel();
let mut watcher = watcher(tx, Duration::from_secs(10)).unwrap(); let mut watcher = watcher(tx, Duration::from_millis(200)).unwrap();
watcher.watch(&path, RecursiveMode::Recursive).unwrap(); watcher.watch(&path, RecursiveMode::Recursive).unwrap();
info!("watching {}", path.display());
loop { loop {
match rx.recv() { match rx.recv() {
Ok(DebouncedEvent::NoticeWrite(_)) => { Ok(_) => {
let builder = GeneralBuilder::new(); let builder = GeneralBuilder::new();
builder.build(&path, &vec![]).ok();
let start_string = format!("---- STARTING BUILD ---- from {}", path.display());
println!("{}", start_string.bold().green());
match builder.build(&path, &vec![]) {
Err(_) => {
println!("{}", "--------- FAIL ---------".bold().red());
},
Ok(_) => {
println!("{}", "----- SUCCESSFUL -----".bold().green());
},
};
println!();
}, },
Err(e) => error!("watch error: {:?}", e), Err(e) => error!("watch error: {:?}", e),
_ => (),
} }
} }
}); });