deb: drive build_binary_package through the BuildView port
The binary build joins the source build on the reporting ports: build_binary_package takes a DebBuildOptions struct (replacing eleven positional arguments), reports target, phases, progress and the outcome through the environment-agnostic BuildView, and the Phase enum with its default classifiers moves from the terminal widget into the deb module (announced through the enter_phase helper). DebUi loses its inherent event methods and only implements the port; tee logging and the SIGINT behavior are unchanged. No behavior change for the CLI; headless consumers pass report::Quiet.
This commit is contained in:
+29
-6
@@ -21,16 +21,33 @@ use std::sync::Arc;
|
||||
use crate::context::LineSink;
|
||||
use crate::logfmt::Classifier;
|
||||
|
||||
/// Identity of the build whose events follow, as announced through
|
||||
/// [`BuildView::target`].
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct BuildTarget<'a> {
|
||||
/// Source package name (e.g. `hello`).
|
||||
pub package: &'a str,
|
||||
/// Full version being built (e.g. `2.10-3`).
|
||||
pub version: &'a str,
|
||||
/// What the build targets: a distribution series, optionally with an
|
||||
/// architecture (`noble`, `sid`, `noble/arm64`).
|
||||
pub target: &'a str,
|
||||
/// Whether this is a source-only build (producing a `.dsc`) as opposed
|
||||
/// to a binary build (producing `.deb` files).
|
||||
pub source_only: bool,
|
||||
}
|
||||
|
||||
/// Observer of a running build: target identification, phases, status
|
||||
/// messages, progress and the final outcome.
|
||||
///
|
||||
/// Implement this to observe [`crate::build`] flows from any frontend. All
|
||||
/// events arrive in order from the build thread; long-lived views are
|
||||
/// expected to be `Send + Sync` because builds may run inside async tasks.
|
||||
/// Implement this to observe the [`crate::build`] and [`crate::deb`] flows
|
||||
/// from any frontend. All events arrive in order from the build thread;
|
||||
/// long-lived views are expected to be `Send + Sync` because builds may run
|
||||
/// inside async tasks.
|
||||
pub trait BuildView: Send + Sync {
|
||||
/// The build target was identified: `package` at `version`, built for
|
||||
/// `target` (a distribution series, optionally with an architecture).
|
||||
fn target(&self, _package: &str, _version: &str, _target: &str) {}
|
||||
/// The build target was identified; the events that follow belong to it
|
||||
/// (including the earliest subprocess output, e.g. a chroot download).
|
||||
fn target(&self, _target: BuildTarget) {}
|
||||
|
||||
/// A named phase started (e.g. "Applying patches"). `classifier`
|
||||
/// rewrites the phase's raw subprocess lines (see [`crate::logfmt`])
|
||||
@@ -63,6 +80,12 @@ pub trait BuildView: Send + Sync {
|
||||
/// diagnostics it collected through [`BuildView::sink`].
|
||||
fn finish_failure(&self) {}
|
||||
|
||||
/// Release the display before writing directly to the shared terminal
|
||||
/// (passthrough diagnostics, cleanup commands that inherit it). The
|
||||
/// release is final for this build; later events may be dropped. A
|
||||
/// no-op for views without a display.
|
||||
fn suspend(&self) {}
|
||||
|
||||
/// Whether this view presents build results to the user by itself;
|
||||
/// callers use this to fall back to plain-line rendering when it does
|
||||
/// not (headless views, verbose mode).
|
||||
|
||||
Reference in New Issue
Block a user