deb,ui: tear the live view down through the interrupt core
The ephemeral guard registers its chroot removal as an interrupt cleanup hook and, once interrupted, stands down from its own teardown so the two cannot race umount/rm; bootstrap bails out of tarball extraction and the lockfile wait, keeping the hook registered on the bootstrap error path so the watchdog can remove the partial tree. The live view registers an interrupt reporter that suspends the widget and returns the log-file hint, silences the tty rendering of the ^C keypress (the echoed "^C" can wrap near the right edge and shift the teardown erase by a row, leaving the first widget line on screen) and kills the shared draw target so late log records cannot repaint the cleared bars. Failure summaries stay quiet when interrupted: the captured errors are just the killed children's death throes, and the dose-builddebcheck diagnosis is skipped for a dependency failure the user interrupted themselves.
This commit is contained in:
+11
-2
@@ -725,8 +725,17 @@ fn install_build_dependencies(
|
||||
let status = cap(&mut cmd, sink).status()?;
|
||||
if !status.success() {
|
||||
view.suspend();
|
||||
if let Err(e) =
|
||||
dose3_explain_dependencies(package, version, arch, build_root, cross, ctx.clone())
|
||||
// Diagnosing a dependency failure the user interrupted themselves
|
||||
// is wasted work
|
||||
if !crate::interrupt::interrupted()
|
||||
&& let Err(e) = dose3_explain_dependencies(
|
||||
package,
|
||||
version,
|
||||
arch,
|
||||
build_root,
|
||||
cross,
|
||||
ctx.clone(),
|
||||
)
|
||||
{
|
||||
log::debug!("dose-builddebcheck diagnosis failed: {e}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user