diff --git a/e2e/tasks/test_task_keep_order b/e2e/tasks/test_task_keep_order index 49a499eb88..3807ea617c 100644 --- a/e2e/tasks/test_task_keep_order +++ b/e2e/tasks/test_task_keep_order @@ -9,3 +9,11 @@ EOF assert "mise run -o keep-order all" "[a] a [b] b [c] c" + +cat <mise.toml +tasks.a = "echo a" +tasks.b = "echo b ; exit 1" +tasks.all.depends = ['a', 'b'] +EOF +assert_fail "mise run -o keep-order all" "[a] a +[b] b" diff --git a/src/cli/run.rs b/src/cli/run.rs index fa8c914315..f066c5e6f4 100644 --- a/src/cli/run.rs +++ b/src/cli/run.rs @@ -369,21 +369,6 @@ impl Run { } }); - if let Some((task, status)) = self.failed_tasks.lock().unwrap().first() { - let prefix = task.estyled_prefix(); - self.eprint( - task, - &prefix, - &format!("{} task failed", style::ered("ERROR")), - ); - exit(*status); - } - - if self.timings() && num_tasks > 1 && *env::MISE_TASK_LEVEL == 0 { - let msg = format!("Finished in {}", time::format_duration(timer.elapsed())); - eprintln!("{}", style::edim(msg)); - }; - if self.output(None) == TaskOutput::KeepOrder { // TODO: display these as tasks complete in order somehow rather than waiting until everything is done let output = self.keep_order_output.lock().unwrap(); @@ -404,6 +389,19 @@ impl Run { } } } + if self.timings() && num_tasks > 1 && *env::MISE_TASK_LEVEL == 0 { + let msg = format!("Finished in {}", time::format_duration(timer.elapsed())); + eprintln!("{}", style::edim(msg)); + }; + if let Some((task, status)) = self.failed_tasks.lock().unwrap().first() { + let prefix = task.estyled_prefix(); + self.eprint( + task, + &prefix, + &format!("{} task failed", style::ered("ERROR")), + ); + exit(*status); + } time!("parallelize_tasks done"); Ok(()) @@ -496,7 +494,7 @@ impl Run { } } - if self.timings() && (task.file.as_ref().is_some() || !task.run().is_empty()) { + if self.task_timings() && (task.file.as_ref().is_some() || !task.run().is_empty()) { self.eprint( task, &prefix, @@ -1003,11 +1001,16 @@ impl Run { } fn timings(&self) -> bool { - !self.quiet(None) - && !self.no_timings - && SETTINGS - .task_timings - .unwrap_or(self.output == Some(TaskOutput::Prefix)) + !self.quiet(None) && !self.no_timings + } + + fn task_timings(&self) -> bool { + self.timings() + && SETTINGS.task_timings.unwrap_or( + self.output == Some(TaskOutput::Prefix) + || self.output == Some(TaskOutput::Timed) + || self.output == Some(TaskOutput::KeepOrder), + ) } fn fetch_tasks(&self, tasks: &mut Vec) -> Result<()> {