2019-06-01 17:00:42 +00:00
|
|
|
use clap::{App, Arg};
|
|
|
|
use log::LevelFilter;
|
2019-05-10 16:59:12 +00:00
|
|
|
use std::error::Error;
|
2020-02-10 16:49:45 +00:00
|
|
|
use std::fs::File;
|
|
|
|
use std::io::{prelude::*, BufReader};
|
2019-05-10 16:59:12 +00:00
|
|
|
|
2019-06-03 03:48:58 +00:00
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
2019-07-20 01:12:04 +00:00
|
|
|
let matches = App::new("nushell")
|
2019-08-24 15:25:04 +00:00
|
|
|
.version(clap::crate_version!())
|
2019-06-01 17:00:42 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("loglevel")
|
|
|
|
.short("l")
|
|
|
|
.long("loglevel")
|
|
|
|
.value_name("LEVEL")
|
|
|
|
.possible_values(&["error", "warn", "info", "debug", "trace"])
|
|
|
|
.takes_value(true),
|
|
|
|
)
|
2020-02-09 02:24:33 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("commands")
|
|
|
|
.short("c")
|
|
|
|
.long("commands")
|
|
|
|
.multiple(false)
|
|
|
|
.takes_value(true),
|
|
|
|
)
|
2019-06-01 17:00:42 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("develop")
|
|
|
|
.long("develop")
|
|
|
|
.multiple(true)
|
|
|
|
.takes_value(true),
|
|
|
|
)
|
2019-10-28 14:46:50 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("debug")
|
|
|
|
.long("debug")
|
|
|
|
.multiple(true)
|
|
|
|
.takes_value(true),
|
|
|
|
)
|
2020-02-10 06:55:07 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("stdin")
|
|
|
|
.long("stdin")
|
|
|
|
.multiple(false)
|
|
|
|
.takes_value(false),
|
|
|
|
)
|
2020-02-10 16:49:45 +00:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("script")
|
|
|
|
.help("the nu script to run")
|
|
|
|
.index(1),
|
|
|
|
)
|
2019-06-01 17:00:42 +00:00
|
|
|
.get_matches();
|
|
|
|
|
|
|
|
let loglevel = match matches.value_of("loglevel") {
|
|
|
|
None => LevelFilter::Warn,
|
|
|
|
Some("error") => LevelFilter::Error,
|
|
|
|
Some("warn") => LevelFilter::Warn,
|
|
|
|
Some("info") => LevelFilter::Info,
|
|
|
|
Some("debug") => LevelFilter::Debug,
|
|
|
|
Some("trace") => LevelFilter::Trace,
|
|
|
|
_ => unreachable!(),
|
|
|
|
};
|
|
|
|
|
|
|
|
let mut builder = pretty_env_logger::formatted_builder();
|
|
|
|
|
|
|
|
if let Ok(s) = std::env::var("RUST_LOG") {
|
|
|
|
builder.parse_filters(&s);
|
|
|
|
}
|
|
|
|
|
|
|
|
builder.filter_module("nu", loglevel);
|
|
|
|
|
|
|
|
match matches.values_of("develop") {
|
|
|
|
None => {}
|
2019-06-01 21:15:21 +00:00
|
|
|
Some(values) => {
|
|
|
|
for item in values {
|
2020-03-05 10:18:53 +00:00
|
|
|
builder.filter_module(&format!("nu::{}", item), LevelFilter::Trace);
|
2019-06-01 21:15:21 +00:00
|
|
|
}
|
|
|
|
}
|
2019-06-01 17:00:42 +00:00
|
|
|
}
|
|
|
|
|
2019-10-28 14:46:50 +00:00
|
|
|
match matches.values_of("debug") {
|
|
|
|
None => {}
|
|
|
|
Some(values) => {
|
|
|
|
for item in values {
|
2020-03-05 10:18:53 +00:00
|
|
|
builder.filter_module(&format!("nu::{}", item), LevelFilter::Debug);
|
2019-10-28 14:46:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-10 16:49:45 +00:00
|
|
|
builder.try_init()?;
|
|
|
|
|
2020-02-09 02:24:33 +00:00
|
|
|
match matches.values_of("commands") {
|
|
|
|
None => {}
|
|
|
|
Some(values) => {
|
2020-04-15 17:50:35 +00:00
|
|
|
let pipelines: Vec<String> = values.map(|x| x.to_string()).collect();
|
|
|
|
futures::executor::block_on(nu_cli::run_vec_of_pipelines(
|
|
|
|
pipelines,
|
|
|
|
matches.is_present("stdin"),
|
|
|
|
))?;
|
2020-02-09 02:24:33 +00:00
|
|
|
return Ok(());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-10 16:49:45 +00:00
|
|
|
match matches.value_of("script") {
|
|
|
|
Some(script) => {
|
|
|
|
let file = File::open(script)?;
|
|
|
|
let reader = BufReader::new(file);
|
2020-04-15 17:50:35 +00:00
|
|
|
let pipelines: Vec<String> = reader
|
|
|
|
.lines()
|
|
|
|
.filter_map(|x| {
|
|
|
|
if let Ok(x) = x {
|
|
|
|
if !x.starts_with('#') {
|
|
|
|
Some(x)
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.collect();
|
|
|
|
|
|
|
|
futures::executor::block_on(nu_cli::run_vec_of_pipelines(
|
|
|
|
pipelines,
|
|
|
|
matches.is_present("stdin"),
|
|
|
|
))?;
|
2020-02-10 16:49:45 +00:00
|
|
|
return Ok(());
|
|
|
|
}
|
|
|
|
|
|
|
|
None => {
|
|
|
|
println!(
|
|
|
|
"Welcome to Nushell {} (type 'help' for more info)",
|
|
|
|
clap::crate_version!()
|
|
|
|
);
|
2020-03-04 18:58:20 +00:00
|
|
|
futures::executor::block_on(nu_cli::cli())?;
|
2020-02-10 16:49:45 +00:00
|
|
|
}
|
|
|
|
}
|
2019-06-01 17:00:42 +00:00
|
|
|
|
2019-05-23 07:23:06 +00:00
|
|
|
Ok(())
|
2019-05-15 16:12:38 +00:00
|
|
|
}
|