Properly error when 'source' argument can't be found (#2836)

This commit is contained in:
Jonathan Turner 2021-01-01 17:33:38 +13:00 committed by GitHub
parent 15d49e4096
commit 328b09fe04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 21 deletions

View File

@ -189,8 +189,9 @@ pub(crate) async fn run_internal_command(
InputStream::from_stream(futures::stream::iter(vec![])) InputStream::from_stream(futures::stream::iter(vec![]))
} }
CommandAction::SourceScript(filename) => { CommandAction::SourceScript(filename) => {
let contents = std::fs::read_to_string(&filename); let contents = std::fs::read_to_string(&filename.item);
if let Ok(contents) = contents { match contents {
Ok(contents) => {
let result = crate::script::run_script_standalone( let result = crate::script::run_script_standalone(
contents, true, &context, false, contents, true, &context, false,
) )
@ -198,17 +199,21 @@ pub(crate) async fn run_internal_command(
if let Err(err) = result { if let Err(err) = result {
return InputStream::one( return InputStream::one(
UntaggedValue::Error(err.into()).into_untagged_value(), UntaggedValue::Error(err.into())
.into_untagged_value(),
); );
} }
InputStream::from_stream(futures::stream::iter(vec![])) InputStream::from_stream(futures::stream::iter(vec![]))
} else { }
InputStream::one( Err(_) => {
UntaggedValue::Error(ShellError::untagged_runtime_error( context.error(ShellError::labeled_error(
format!("could not source '{}'", filename), "Can't load file to source",
)) "can't load file",
.into_untagged_value(), filename.span(),
) ));
InputStream::from_stream(futures::stream::iter(vec![]))
}
} }
} }
CommandAction::AddPlugins(path) => { CommandAction::AddPlugins(path) => {

View File

@ -43,6 +43,6 @@ pub async fn source(args: CommandArgs) -> Result<OutputStream, ShellError> {
let (SourceArgs { filename }, _) = args.process().await?; let (SourceArgs { filename }, _) = args.process().await?;
Ok(OutputStream::one(ReturnSuccess::action( Ok(OutputStream::one(ReturnSuccess::action(
CommandAction::SourceScript(filename.item), CommandAction::SourceScript(filename),
))) )))
} }

View File

@ -1,6 +1,6 @@
use crate::value::Value; use crate::value::Value;
use nu_errors::ShellError; use nu_errors::ShellError;
use nu_source::{b, DebugDocBuilder, PrettyDebug}; use nu_source::{b, DebugDocBuilder, PrettyDebug, Tagged};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// The inner set of actions for the command processor. Each denotes a way to change state in the processor without changing it directly from the command itself. /// The inner set of actions for the command processor. Each denotes a way to change state in the processor without changing it directly from the command itself.
@ -27,7 +27,7 @@ pub enum CommandAction {
/// Add plugins from path given /// Add plugins from path given
AddPlugins(String), AddPlugins(String),
/// Run the given script in the current context (given filename) /// Run the given script in the current context (given filename)
SourceScript(String), SourceScript(Tagged<String>),
/// Go to the previous shell in the shell ring buffer /// Go to the previous shell in the shell ring buffer
PreviousShell, PreviousShell,
/// Go to the next shell in the shell ring buffer /// Go to the next shell in the shell ring buffer