diff --git a/tools/cli/src/mentat_cli/command_parser.rs b/tools/cli/src/mentat_cli/command_parser.rs index 3b925977..7f1eb0ae 100644 --- a/tools/cli/src/mentat_cli/command_parser.rs +++ b/tools/cli/src/mentat_cli/command_parser.rs @@ -68,6 +68,26 @@ impl Command { &Command::Close => true } } + + pub fn output(&self) -> String { + match self { + &Command::Query(ref args) => { + format!(".{} {}", QUERY_COMMAND, args) + }, + &Command::Transact(ref args) => { + format!(".{} {}", TRANSACT_COMMAND, args) + }, + &Command::Help(ref args) => { + format!(".{} {:?}", HELP_COMMAND, args) + }, + &Command::Open(ref args) => { + format!(".{} {}", OPEN_COMMAND, args) + } + &Command::Close => { + format!(".{}", CLOSE_COMMAND) + }, + } + } } pub fn command(s: &str) -> Result { diff --git a/tools/cli/src/mentat_cli/lib.rs b/tools/cli/src/mentat_cli/lib.rs index e05339a7..bcc7c71c 100644 --- a/tools/cli/src/mentat_cli/lib.rs +++ b/tools/cli/src/mentat_cli/lib.rs @@ -42,8 +42,8 @@ pub fn run() -> i32 { opts.optopt("d", "", "The path to a database to open", "DATABASE"); opts.optflag("h", "help", "Print this help message and exit"); - opts.optopt("q", "query", "Execute a query on startup. Queries are executed after any transacts.", "QUERY"); - opts.optopt("t", "transact", "Execute a transact on startup. Transacts are executed before queries.", "TRANSACT"); + opts.optmulti("q", "query", "Execute a query on startup. Queries are executed after any transacts.", "QUERY"); + opts.optmulti("t", "transact", "Execute a transact on startup. Transacts are executed before queries.", "TRANSACT"); opts.optflag("v", "version", "Print version and exit"); let matches = match opts.parse(&args[1..]) { @@ -64,22 +64,30 @@ pub fn run() -> i32 { return 0; } - let db_name = matches.opt_str("d"); + let mut last_arg: Option<&str> = None; + let cmds:Vec = args.iter().filter_map(|arg| { + match last_arg { + Some("-d") => { + last_arg = None; + Some(command_parser::Command::Open(arg.clone())) + }, + Some("-q") => { + last_arg = None; + Some(command_parser::Command::Query(arg.clone())) + }, + Some("-t") => { + last_arg = None; + Some(command_parser::Command::Transact(arg.clone())) + }, + Some(_) | + None => { + last_arg = Some(&arg); + None + }, + } + }).collect(); - let transacts = matches.opt_strs("t"); - let queries = matches.opt_strs("q"); - - let mut cmds = Vec::with_capacity(transacts.len() + queries.len()); - - for transact in transacts { - cmds.push(command_parser::Command::Transact(transact)); - } - for query in queries { - cmds.push(command_parser::Command::Query(query)); - } - - - let repl = repl::Repl::new(db_name); + let repl = repl::Repl::new(); if repl.is_ok() { repl.unwrap().run(Some(cmds)); diff --git a/tools/cli/src/mentat_cli/repl.rs b/tools/cli/src/mentat_cli/repl.rs index e493026b..fd6b3376 100644 --- a/tools/cli/src/mentat_cli/repl.rs +++ b/tools/cli/src/mentat_cli/repl.rs @@ -54,9 +54,8 @@ pub struct Repl { impl Repl { /// Constructs a new `Repl`. - pub fn new(db_name: Option) -> Result { - let store = try!(Store::new(db_name.clone()).map_err(|e| e.to_string())); - println!("Database {:?} opened", db_output_name(&db_name.unwrap_or("".to_string()))); + pub fn new() -> Result { + let store = Store::new(None).map_err(|e| e.to_string())?; Ok(Repl{ store: store, }) @@ -68,6 +67,7 @@ impl Repl { if let Some(cmds) = startup_commands { for command in cmds.iter() { + println!("{}", command.output()); self.handle_command(command.clone()); } }