diff --git a/CHANGELOG.md b/CHANGELOG.md index 72ef7717420fbebedd1dcd91e9410d287e939364..7ca94ce820bd4d07ec333105a83e9146f957757a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ with the `YY.0M.MICRO` scheme. - _Clusterwide SQL_ now availiable via `\set language sql` in interactive console. +- Interactive console is disabled by default. Enable it implicitly with `picodata run -i`. + - Allow specifying `picodata connect [user@][host][:port]` format. It overrides the `--user` option. diff --git a/src/args.rs b/src/args.rs index 9ce2d1dfe0be532d065dbbbf83c34d187da0c66b..2c1a33f4140fd3e05ee635dd3ff9454c326275f0 100644 --- a/src/args.rs +++ b/src/args.rs @@ -134,6 +134,10 @@ pub struct Run { /// in Lua as `_G.pico.httpd` variable. If not specified, it won't /// be initialized. pub http_listen: Option<Address>, + + #[clap(short = 'i', long = "interactive", env = "PICODATA_INTERACTIVE_MODE")] + /// Enable interactive console + pub interactive_mode: bool, } // Copy enum because clap:ArgEnum can't be derived for the foreign SayLevel. @@ -168,7 +172,17 @@ impl From<LogLevel> for SayLevel { impl Run { /// Get the arguments that will be passed to `tarantool_main` pub fn tt_args(&self) -> Result<Vec<CString>, String> { - Ok(vec![current_exe()?]) + let mut args = vec![ + current_exe()?, + CString::new(r"-e").unwrap(), + CString::new(r#" "#).unwrap(), + ]; + + if self.interactive_mode { + args.push(CString::new("-i").unwrap()); + } + + Ok(args) } pub fn advertise_address(&self) -> String { @@ -729,6 +743,17 @@ mod tests { assert_eq!(parsed.init_replication_factor, 9); } + { + let parsed = parse![Run, "-i"]; + assert_eq!(parsed.interactive_mode, true); + + let parsed = parse![Run, "--interactive"]; + assert_eq!(parsed.interactive_mode, true); + + let parsed = parse![Run,]; + assert_eq!(parsed.interactive_mode, false); + } + { let parsed = parse![Connect, "somewhere:3301"]; assert_eq!(parsed.user, "guest");