MCPcopy Create free account
hub / github.com/bootc-dev/bootc / handle_layer_progress_print

Function handle_layer_progress_print

crates/lib/src/deploy.rs:233–394  ·  view source on GitHub ↗

Write container fetch progress to standard output.

(mut config: LayerProgressConfig)

Source from the content-addressed store, hash-verified

231
232/// Write container fetch progress to standard output.
233async fn handle_layer_progress_print(mut config: LayerProgressConfig) -> ProgressWriter {
234 let start = std::time::Instant::now();
235 let mut total_read = 0u64;
236 let bar = indicatif::MultiProgress::new();
237 if config.quiet {
238 bar.set_draw_target(indicatif::ProgressDrawTarget::hidden());
239 }
240 let layers_bar = bar.add(indicatif::ProgressBar::new(
241 config.n_layers_to_fetch.try_into().unwrap(),
242 ));
243 let byte_bar = bar.add(indicatif::ProgressBar::new(0));
244 // let byte_bar = indicatif::ProgressBar::new(0);
245 // byte_bar.set_draw_target(indicatif::ProgressDrawTarget::hidden());
246 layers_bar.set_style(
247 indicatif::ProgressStyle::default_bar()
248 .template("{prefix} {bar} {pos}/{len} {wide_msg}")
249 .unwrap(),
250 );
251 let taskname = "Fetching layers";
252 layers_bar.set_prefix(taskname);
253 layers_bar.set_message("");
254 byte_bar.set_prefix("Fetching");
255 byte_bar.set_style(
256 indicatif::ProgressStyle::default_bar()
257 .template(
258 " └ {prefix} {bar} {binary_bytes}/{binary_total_bytes} ({binary_bytes_per_sec}) {wide_msg}",
259 )
260 .unwrap()
261 );
262
263 let mut subtasks = vec![];
264 let mut subtask: SubTaskBytes = Default::default();
265 loop {
266 tokio::select! {
267 // Always handle layer changes first.
268 biased;
269 layer = config.layers.recv() => {
270 if let Some(l) = layer {
271 let layer = descriptor_of_progress(&l);
272 let layer_type = prefix_of_progress(&l);
273 let short_digest = &layer.digest().digest()[0..21];
274 let layer_size = layer.size();
275 if l.is_starting() {
276 // Reset the progress bar
277 byte_bar.reset_elapsed();
278 byte_bar.reset_eta();
279 byte_bar.set_length(layer_size);
280 byte_bar.set_message(format!("{layer_type} {short_digest}"));
281
282 subtask = SubTaskBytes {
283 subtask: layer_type.into(),
284 description: format!("{layer_type}: {short_digest}").clone().into(),
285 id: short_digest.to_string().clone().into(),
286 bytes_cached: 0,
287 bytes: 0,
288 bytes_total: layer_size,
289 };
290 } else {

Callers 1

pull_from_preparedFunction · 0.70

Calls 3

sendMethod · 0.80
addMethod · 0.45
intoMethod · 0.45

Tested by

no test coverage detected