87 lines
2.2 KiB
Rust
87 lines
2.2 KiB
Rust
#[macro_use]
|
|
extern crate log;
|
|
|
|
use std::{thread, env};
|
|
use std::sync::{Mutex, Arc, mpsc};
|
|
|
|
use colored::*;
|
|
|
|
use percent_encoding::percent_decode;
|
|
|
|
use hyper::{Body, Response, Server};
|
|
use hyper::service::service_fn_ok;
|
|
use hyper::rt::Future;
|
|
|
|
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![]));
|
|
let clone = tasks.clone();
|
|
|
|
thread::spawn(move || {
|
|
|
|
let addr = ([127, 0, 0, 1], 1500).into();
|
|
|
|
let server = Server::bind(&addr)
|
|
.serve(move || {
|
|
let clone = clone.clone();
|
|
let tx_clone = tx.clone();
|
|
let r = service_fn_ok(move |r| {
|
|
clone.lock().unwrap().push(r.uri().clone());
|
|
tx_clone.send(()).unwrap();
|
|
Response::new(Body::from("Ok"))
|
|
});
|
|
r
|
|
})
|
|
.map_err(|e| error!("server error: {}", e));
|
|
|
|
info!("mars server listening on {}...", addr);
|
|
hyper::rt::run(server);
|
|
|
|
});
|
|
|
|
let mut builder = GeneralBuilder::new();
|
|
|
|
for _ in rx {
|
|
|
|
let uri = {
|
|
let mut tasks = tasks.lock().unwrap();
|
|
tasks.pop()
|
|
};
|
|
|
|
if let Some(uri) = uri {
|
|
|
|
let uri = percent_decode(uri.path().as_bytes()).decode_utf8().unwrap();
|
|
let (path, args) = builder_arguments_from_string(&*uri);
|
|
|
|
let path_string = path.to_str().unwrap();
|
|
let start_string = format!("---- STARTING BUILD ---- from {} {}", path_string, args.join(" "));
|
|
println!("{}", start_string.bold().green());
|
|
|
|
match builder.build(&path, &args) {
|
|
Err(_) => {
|
|
println!("{}", "--------- FAIL ---------".bold().red());
|
|
},
|
|
Ok(_) => {
|
|
println!("{}", "----- SUCCESSFUL -----".bold().green());
|
|
},
|
|
};
|
|
println!();
|
|
|
|
}
|
|
}
|
|
}
|