diff --git a/e2e/cli/test_upgrade_progress_summary b/e2e/cli/test_upgrade_progress_summary new file mode 100644 index 0000000000..43132f0aef --- /dev/null +++ b/e2e/cli/test_upgrade_progress_summary @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +echo 'dummy 1' >.tool-versions +mise install dummy@1.0.0 >/dev/null 2>&1 || fail "pre-install of dummy@1.0.0 failed" + +output="$(MISE_FORCE_PROGRESS=1 mise up dummy 2>&1)" +summary_line=" dummy 1.0.0 → 1.1.0" + +if [[ $output != *"$summary_line"* ]]; then + fail "upgrade summary did not include '$summary_line': $output" +fi + +after_summary="${output#*"$summary_line"}" +if grep -q $'\033\\[[0-9;]*J' <<<"$after_summary"; then + fail "upgrade summary was followed by a terminal clear sequence" +fi diff --git a/src/cli/upgrade.rs b/src/cli/upgrade.rs index 34b67073bc..fe2ab9fb21 100644 --- a/src/cli/upgrade.rs +++ b/src/cli/upgrade.rs @@ -380,6 +380,7 @@ impl Upgrade { } } + mpr.finish_progress(); let ts = config.get_toolset().await?; // Fix up sources and requests for lockfile update - CLI args produce @@ -411,6 +412,7 @@ impl Upgrade { }); } + mpr.finish_progress(); Self::print_summary(&outdated, &successful_versions)?; install_error diff --git a/src/ui/multi_progress_report.rs b/src/ui/multi_progress_report.rs index 82a2d7ff3c..ad303413b3 100644 --- a/src/ui/multi_progress_report.rs +++ b/src/ui/multi_progress_report.rs @@ -181,9 +181,13 @@ impl MultiProgressReport { progress_trace!("footer_finish: completed={}, total={}", completed, total); - // Stop clx progress - progress::stop(); + self.finish_progress(); + } + /// Render the final progress state, then clear clx's registered jobs so + /// later regular terminal output cannot be erased by process shutdown. + pub fn finish_progress(&self) { + progress::stop(); self.reset_jobs(); }