From 7fbd6ce232c4f6b6574a3202cd919c6e71b2d374 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Tue, 17 Sep 2019 14:09:15 +1200 Subject: [PATCH] Fix internal paths --- Cargo.lock | 8 ++++---- src/cli.rs | 20 ++++++++++++++---- src/commands/autoview.rs | 6 +++--- src/commands/classified.rs | 2 ++ src/commands/command.rs | 42 ++++++++++---------------------------- src/commands/enter.rs | 1 + src/commands/fetch.rs | 2 +- src/commands/open.rs | 2 +- src/commands/post.rs | 3 ++- src/commands/save.rs | 2 +- src/context.rs | 3 ++- 11 files changed, 44 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06bc5b48be..cd99727678 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1556,7 +1556,7 @@ dependencies = [ "rawkey 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "roxmltree 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "rusqlite 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustyline 5.0.2 (git+https://github.com/kkawakam/rustyline)", + "rustyline 5.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", "serde-hjson 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2195,8 +2195,8 @@ dependencies = [ [[package]] name = "rustyline" -version = "5.0.2" -source = "git+https://github.com/kkawakam/rustyline#5e68e972810133a7343b75db30addc98aea63ba0" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3216,7 +3216,7 @@ dependencies = [ "checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustyline 5.0.2 (git+https://github.com/kkawakam/rustyline)" = "" +"checksum rustyline 5.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4795e277e6e57dec9df62b515cd4991371daa80e8dc8d80d596e58722b89c417" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" "checksum safemem 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e133ccc4f4d1cd4f89cc8a7ff618287d56dc7f638b8e38fc32c5fdcadc339dd5" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" diff --git a/src/cli.rs b/src/cli.rs index 0bc8856195..531ffc1f54 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -432,6 +432,7 @@ async fn process_line(readline: Result, ctx: &mut Context let mut input = ClassifiedInputStream::new(); let mut iter = pipeline.commands.into_iter().peekable(); + let mut is_first_command = true; loop { let item: Option = iter.next(); @@ -457,20 +458,29 @@ async fn process_line(readline: Result, ctx: &mut Context ( Some(ClassifiedCommand::Internal(left)), Some(ClassifiedCommand::External(_)), - ) => match left.run(ctx, input, Text::from(line)).await { + ) => match left + .run(ctx, input, Text::from(line), is_first_command) + .await + { Ok(val) => ClassifiedInputStream::from_input_stream(val), Err(err) => return LineResult::Error(line.clone(), err), }, (Some(ClassifiedCommand::Internal(left)), Some(_)) => { - match left.run(ctx, input, Text::from(line)).await { + match left + .run(ctx, input, Text::from(line), is_first_command) + .await + { Ok(val) => ClassifiedInputStream::from_input_stream(val), Err(err) => return LineResult::Error(line.clone(), err), } } (Some(ClassifiedCommand::Internal(left)), None) => { - match left.run(ctx, input, Text::from(line)).await { + match left + .run(ctx, input, Text::from(line), is_first_command) + .await + { Ok(val) => ClassifiedInputStream::from_input_stream(val), Err(err) => return LineResult::Error(line.clone(), err), } @@ -497,7 +507,9 @@ async fn process_line(readline: Result, ctx: &mut Context Err(err) => return LineResult::Error(line.clone(), err), } } - } + }; + + is_first_command = false; } LineResult::Success(line.clone()) diff --git a/src/commands/autoview.rs b/src/commands/autoview.rs index 9edc926334..c135fecd67 100644 --- a/src/commands/autoview.rs +++ b/src/commands/autoview.rs @@ -45,7 +45,7 @@ pub fn autoview( { let binary = context.get_command("binaryview"); if let Some(binary) = binary { - let result = binary.run(raw.with_input(input), &context.commands); + let result = binary.run(raw.with_input(input), &context.commands, false); result.collect::>().await; } else { for i in input { @@ -61,7 +61,7 @@ pub fn autoview( } else if is_single_origined_text_value(&input) { let text = context.get_command("textview"); if let Some(text) = text { - let result = text.run(raw.with_input(input), &context.commands); + let result = text.run(raw.with_input(input), &context.commands, false); result.collect::>().await; } else { for i in input { @@ -84,7 +84,7 @@ pub fn autoview( } } else { let table = context.expect_command("table"); - let result = table.run(raw.with_input(input), &context.commands); + let result = table.run(raw.with_input(input), &context.commands, false); result.collect::>().await; } } diff --git a/src/commands/classified.rs b/src/commands/classified.rs index 1a107267df..b042441403 100644 --- a/src/commands/classified.rs +++ b/src/commands/classified.rs @@ -96,6 +96,7 @@ impl InternalCommand { context: &mut Context, input: ClassifiedInputStream, source: Text, + is_first_command: bool, ) -> Result { if log_enabled!(log::Level::Trace) { trace!(target: "nu::run::internal", "->"); @@ -113,6 +114,7 @@ impl InternalCommand { self.args, &source, objects, + is_first_command, ); let result = trace_out_stream!(target: "nu::trace_stream::internal", source: &source, "output" = result); diff --git a/src/commands/command.rs b/src/commands/command.rs index 99352a7b18..8bbf2d7981 100644 --- a/src/commands/command.rs +++ b/src/commands/command.rs @@ -41,33 +41,6 @@ impl UnevaluatedCallInfo { name_tag: self.name_tag, }) } - - pub fn has_it_or_block(&self) -> bool { - use hir::RawExpression; - use hir::Variable; - - if let Some(positional) = &self.args.positional() { - for pos in positional { - match pos { - Tagged { - item: RawExpression::Variable(Variable::It(_)), - .. - } => { - return true; - } - Tagged { - item: RawExpression::Block(_), - .. - } => { - return true; - } - _ => {} - } - } - } - - false - } } #[derive(Deserialize, Serialize, Debug, Clone)] @@ -556,13 +529,20 @@ impl Command { } } - pub fn run(&self, args: CommandArgs, registry: ®istry::CommandRegistry) -> OutputStream { + pub fn run( + &self, + args: CommandArgs, + registry: ®istry::CommandRegistry, + is_first_command: bool, + ) -> OutputStream { match self { Command::WholeStream(command) => match command.run(args, registry) { Ok(stream) => stream, Err(err) => OutputStream::one(Err(err)), }, - Command::PerItem(command) => self.run_helper(command.clone(), args, registry.clone()), + Command::PerItem(command) => { + self.run_helper(command.clone(), args, registry.clone(), is_first_command) + } } } @@ -571,6 +551,7 @@ impl Command { command: Arc, args: CommandArgs, registry: CommandRegistry, + is_first_command: bool, ) -> OutputStream { let raw_args = RawCommandArgs { host: args.host, @@ -578,7 +559,7 @@ impl Command { call_info: args.call_info, }; - if raw_args.call_info.has_it_or_block() { + if !is_first_command { let out = args .input .values @@ -603,7 +584,6 @@ impl Command { .call_info .evaluate(®istry, &Scope::it_value(nothing.clone())) .unwrap(); - // We don't have an $it or block, so just execute what we have match command .run(&call_info, ®istry, &raw_args, nothing) diff --git a/src/commands/enter.rs b/src/commands/enter.rs index 4148d03c5f..ee19b096ed 100644 --- a/src/commands/enter.rs +++ b/src/commands/enter.rs @@ -109,6 +109,7 @@ impl PerItemCommand for Enter { let mut result = converter.run( new_args.with_input(vec![tagged_contents]), ®istry, + false ); let result_vec: Vec> = result.drain_vec().await; diff --git a/src/commands/fetch.rs b/src/commands/fetch.rs index 1494423cf5..c9e16cb45a 100644 --- a/src/commands/fetch.rs +++ b/src/commands/fetch.rs @@ -101,7 +101,7 @@ fn run( name_tag: raw_args.call_info.name_tag, } }; - let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry); + let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry, false); let result_vec: Vec> = result.drain_vec().await; for res in result_vec { match res { diff --git a/src/commands/open.rs b/src/commands/open.rs index 8dae5bd26e..fa068d63e6 100644 --- a/src/commands/open.rs +++ b/src/commands/open.rs @@ -102,7 +102,7 @@ fn run( name_tag: raw_args.call_info.name_tag, } }; - let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry); + let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry, false); let result_vec: Vec> = result.drain_vec().await; for res in result_vec { match res { diff --git a/src/commands/post.rs b/src/commands/post.rs index b9aca99e9c..f653e6492a 100644 --- a/src/commands/post.rs +++ b/src/commands/post.rs @@ -112,7 +112,7 @@ fn run( name_tag: raw_args.call_info.name_tag, } }; - let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry); + let mut result = converter.run(new_args.with_input(vec![tagged_contents]), ®istry, false); let result_vec: Vec> = result.drain_vec().await; for res in result_vec { match res { @@ -195,6 +195,7 @@ pub async fn post( let mut result = converter.run( new_args.with_input(vec![item.clone().tagged(tag.clone())]), ®istry, + false, ); let result_vec: Vec> = result.drain_vec().await; diff --git a/src/commands/save.rs b/src/commands/save.rs index d7ae75312a..253045b3f9 100644 --- a/src/commands/save.rs +++ b/src/commands/save.rs @@ -188,7 +188,7 @@ fn save( name_tag: raw_args.call_info.name_tag, } }; - let mut result = converter.run(new_args.with_input(input), ®istry); + let mut result = converter.run(new_args.with_input(input), ®istry, false); let result_vec: Vec> = result.drain_vec().await; if converter.is_binary() { process_binary_return_success!(result_vec, name_tag) diff --git a/src/context.rs b/src/context.rs index fe68864db1..57dd1a841c 100644 --- a/src/context.rs +++ b/src/context.rs @@ -125,9 +125,10 @@ impl Context { args: hir::Call, source: &Text, input: InputStream, + is_first_command: bool, ) -> OutputStream { let command_args = self.command_args(args, input, source, source_map, name_tag); - command.run(command_args, self.registry()) + command.run(command_args, self.registry(), is_first_command) } fn call_info(