summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/args/config_file.rs14
-rw-r--r--cli/tests/integration/task_tests.rs7
2 files changed, 21 insertions, 0 deletions
diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs
index 48f77d009..8e6b151a6 100644
--- a/cli/args/config_file.rs
+++ b/cli/args/config_file.rs
@@ -2,6 +2,8 @@
use crate::args::ConfigFlag;
use crate::args::Flags;
+use crate::args::TaskFlags;
+use crate::fs_util;
use crate::fs_util::canonicalize_path;
use crate::fs_util::specifier_parent;
use crate::fs_util::specifier_to_file_path;
@@ -449,6 +451,18 @@ impl ConfigFile {
return Ok(Some(cf));
}
}
+ // attempt to resolve the config file from the task subcommand's
+ // `--cwd` when specified
+ if let crate::args::DenoSubcommand::Task(TaskFlags {
+ cwd: Some(path),
+ ..
+ }) = &flags.subcommand
+ {
+ let task_cwd = fs_util::canonicalize_path(&PathBuf::from(path))?;
+ if let Some(path) = Self::discover_from(&task_cwd, &mut checked)? {
+ return Ok(Some(path));
+ }
+ };
// From CWD walk up to root looking for deno.json or deno.jsonc
let cwd = std::env::current_dir()?;
Self::discover_from(&cwd, &mut checked)
diff --git a/cli/tests/integration/task_tests.rs b/cli/tests/integration/task_tests.rs
index 837d9d2b7..1c3240f89 100644
--- a/cli/tests/integration/task_tests.rs
+++ b/cli/tests/integration/task_tests.rs
@@ -19,6 +19,13 @@ itest!(task_cwd {
exit_code: 0,
});
+itest!(task_cwd_resolves_config_from_specified_dir {
+ args: "task -q --cwd task",
+ output: "task/task_no_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
itest!(task_non_existent {
args: "task --config task/deno.json non_existent",
output: "task/task_non_existent.out",