diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-06-28 16:45:55 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-28 16:45:55 -0400 |
commit | 01adbb1efb116d72dc24843294f335bd63b24b0a (patch) | |
tree | 920346be399301867567b45356b6613ca03bc109 /cli/tools/task.rs | |
parent | 5b7bcefa111b1e4fc1e02bb7fb1c8f152e5fd6aa (diff) |
refactor: add `RootConfig` (#14985)
Diffstat (limited to 'cli/tools/task.rs')
-rw-r--r-- | cli/tools/task.rs | 112 |
1 files changed, 6 insertions, 106 deletions
diff --git a/cli/tools/task.rs b/cli/tools/task.rs index 1b6846e7c..fa9f30d7d 100644 --- a/cli/tools/task.rs +++ b/cli/tools/task.rs @@ -1,6 +1,5 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -use crate::args::ConfigFile; use crate::args::Flags; use crate::args::TaskFlags; use crate::colors; @@ -12,34 +11,6 @@ use deno_core::error::AnyError; use std::collections::BTreeMap; use std::collections::HashMap; use std::path::PathBuf; -use std::sync::Arc; - -fn get_tasks_config( - maybe_config_file: Option<&ConfigFile>, -) -> Result<BTreeMap<String, String>, AnyError> { - if let Some(config_file) = maybe_config_file { - let maybe_tasks_config = config_file.to_tasks_config()?; - if let Some(tasks_config) = maybe_tasks_config { - for key in tasks_config.keys() { - if key.is_empty() { - bail!("Configuration file task names cannot be empty"); - } else if !key - .chars() - .all(|c| c.is_ascii_alphanumeric() || matches!(c, '_' | '-' | ':')) - { - bail!("Configuration file task names must only contain alpha-numeric characters, colons (:), underscores (_), or dashes (-). Task: {}", key); - } else if !key.chars().next().unwrap().is_ascii_alphabetic() { - bail!("Configuration file task names must start with an alphabetic character. Task: {}", key); - } - } - Ok(tasks_config) - } else { - bail!("No tasks found in configuration file") - } - } else { - bail!("No config file found") - } -} fn print_available_tasks(tasks_config: BTreeMap<String, String>) { eprintln!("{}", colors::green("Available tasks:")); @@ -58,10 +29,9 @@ pub async fn execute_script( "{} deno task is unstable and may drastically change in the future", crate::colors::yellow("Warning"), ); - let flags = Arc::new(flags); - let ps = ProcState::build(flags.clone()).await?; - let tasks_config = get_tasks_config(ps.maybe_config_file.as_ref())?; - let config_file_url = &ps.maybe_config_file.as_ref().unwrap().specifier; + let ps = ProcState::build(flags).await?; + let tasks_config = ps.config.resolve_tasks_config()?; + let config_file_url = ps.config.maybe_config_file_specifier().unwrap(); let config_file_path = if config_file_url.scheme() == "file" { config_file_url.to_file_path().unwrap() } else { @@ -81,8 +51,9 @@ pub async fn execute_script( let maybe_script = tasks_config.get(&task_name); if let Some(script) = maybe_script { - let additional_args = flags - .argv + let additional_args = ps + .config + .argv() .iter() // surround all the additional arguments in double quotes // and santize any command substition @@ -108,74 +79,3 @@ pub async fn execute_script( Ok(1) } } - -#[cfg(test)] -mod test { - use deno_ast::ModuleSpecifier; - use pretty_assertions::assert_eq; - - use super::*; - - #[test] - fn tasks_no_tasks() { - run_task_error_test(r#"{}"#, "No tasks found in configuration file"); - } - - #[test] - fn task_name_invalid_chars() { - run_task_error_test( - r#"{ - "tasks": { - "build": "deno test", - "some%test": "deno bundle mod.ts" - } - }"#, - concat!( - "Configuration file task names must only contain alpha-numeric ", - "characters, colons (:), underscores (_), or dashes (-). Task: some%test", - ), - ); - } - - #[test] - fn task_name_non_alpha_starting_char() { - run_task_error_test( - r#"{ - "tasks": { - "build": "deno test", - "1test": "deno bundle mod.ts" - } - }"#, - concat!( - "Configuration file task names must start with an ", - "alphabetic character. Task: 1test", - ), - ); - } - - #[test] - fn task_name_empty() { - run_task_error_test( - r#"{ - "tasks": { - "build": "deno test", - "": "deno bundle mod.ts" - } - }"#, - "Configuration file task names cannot be empty", - ); - } - - fn run_task_error_test(config_text: &str, expected_error: &str) { - let config_dir = ModuleSpecifier::parse("file:///deno/").unwrap(); - let config_specifier = config_dir.join("tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); - assert_eq!( - get_tasks_config(Some(&config_file)) - .err() - .unwrap() - .to_string(), - expected_error, - ); - } -} |