From d78313ea80b31754ed32dc9d02d8f9925348e351 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:38:32 -0600 Subject: [PATCH] feat: added *:_default task name (#3690) Fixes #2212 --- docs/tasks/file-tasks.md | 8 +++++--- e2e/tasks/test_task_default | 10 ++++++++++ src/cli/tasks/add.rs | 7 ++++++- src/task/mod.rs | 9 +++++++-- 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 e2e/tasks/test_task_default diff --git a/docs/tasks/file-tasks.md b/docs/tasks/file-tasks.md index 32a6c89df2..386e0a34de 100644 --- a/docs/tasks/file-tasks.md +++ b/docs/tasks/file-tasks.md @@ -96,6 +96,7 @@ when loaded. mise-tasks ├── build └── test + ├── _default ├── integration └── units ``` @@ -105,9 +106,10 @@ Running `mise tasks` will give the below output: ```text $ mise tasks Name Description Source -build .../mise-tasks/build -test:integration .../mise-tasks/test/integration -test:units .../mise-tasks/test/units +build ./mise-tasks/build +test ./mise-tasks/test/_default +test:integration ./mise-tasks/test/integration +test:units ./mise-tasks/test/units ``` ## Arguments diff --git a/e2e/tasks/test_task_default b/e2e/tasks/test_task_default new file mode 100644 index 0000000000..06f1031d81 --- /dev/null +++ b/e2e/tasks/test_task_default @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +assert "mise task add --file foo:bar:baz -- echo baz" +assert "mise task add --file foo:bar -- echo bar" +ls -lR . + +assert "mise tasks" "foo:bar +foo:bar:baz" +assert "mise task run foo:bar:baz" "baz" +assert "mise task run foo:bar" "bar" diff --git a/src/cli/tasks/add.rs b/src/cli/tasks/add.rs index 15b0c0ad71..cf8709be61 100644 --- a/src/cli/tasks/add.rs +++ b/src/cli/tasks/add.rs @@ -2,6 +2,7 @@ use crate::config::config_file; use crate::task::Task; use crate::{config, file}; use eyre::Result; +use std::path::MAIN_SEPARATOR_STR; use toml_edit::Item; /// Create a new task @@ -69,7 +70,10 @@ pub struct TasksAdd { impl TasksAdd { pub fn run(self) -> Result<()> { if self.file { - let path = Task::task_dir().join(&self.task); + let mut path = Task::task_dir().join(self.task.replace(':', MAIN_SEPARATOR_STR)); + if path.is_dir() { + path = path.join("_default"); + } let mut lines = vec![format!( "#!/usr/bin/env {}", self.shell.clone().unwrap_or("bash".into()) @@ -123,6 +127,7 @@ impl TasksAdd { } file::create_dir_all(path.parent().unwrap())?; file::write(&path, lines.join("\n"))?; + file::make_executable(&path)?; } else { let path = config::local_toml_config_path(); let mut doc: toml_edit::DocumentMut = diff --git a/src/task/mod.rs b/src/task/mod.rs index f96396d2db..4d6bf723ad 100644 --- a/src/task/mod.rs +++ b/src/task/mod.rs @@ -461,7 +461,7 @@ impl Task { } fn name_from_path(prefix: impl AsRef, path: impl AsRef) -> Result { - Ok(path + let name = path .as_ref() .strip_prefix(prefix) .map(|p| match p { @@ -476,7 +476,12 @@ fn name_from_path(prefix: impl AsRef, path: impl AsRef) -> Result, td: &TaskDep) -> Result> {