@@ -142,6 +142,7 @@ async fn handle_layer_progress_print(
142
142
mut layers : tokio:: sync:: mpsc:: Receiver < ostree_container:: store:: ImportProgress > ,
143
143
mut layer_bytes : tokio:: sync:: watch:: Receiver < Option < ostree_container:: store:: LayerProgress > > ,
144
144
n_layers_to_fetch : usize ,
145
+ download_bytes : u64 ,
145
146
) {
146
147
let start = std:: time:: Instant :: now ( ) ;
147
148
let mut total_read = 0u64 ;
@@ -150,23 +151,31 @@ async fn handle_layer_progress_print(
150
151
n_layers_to_fetch. try_into ( ) . unwrap ( ) ,
151
152
) ) ;
152
153
let byte_bar = bar. add ( indicatif:: ProgressBar :: new ( 0 ) ) ;
154
+ let total_byte_bar = bar. add ( indicatif:: ProgressBar :: new ( download_bytes) ) ;
153
155
// let byte_bar = indicatif::ProgressBar::new(0);
154
156
// byte_bar.set_draw_target(indicatif::ProgressDrawTarget::hidden());
157
+ println ! ( "" ) ;
158
+ layers_bar. inc ( 1 ) ;
155
159
layers_bar. set_style (
156
160
indicatif:: ProgressStyle :: default_bar ( )
157
- . template ( "{prefix} {bar} { pos}/{len} {wide_msg }" )
161
+ . template ( "{prefix} {pos}/{len} {bar:15 }" )
158
162
. unwrap ( ) ,
159
163
) ;
160
- layers_bar. set_prefix ( "Fetching layers " ) ;
164
+ layers_bar. set_prefix ( "Fetching Layer " ) ;
161
165
layers_bar. set_message ( "" ) ;
162
- byte_bar. set_prefix ( "Fetching" ) ;
163
166
byte_bar. set_style (
164
167
indicatif:: ProgressStyle :: default_bar ( )
165
168
. template (
166
- " └ {prefix } {bar} {binary_bytes}/{binary_total_bytes} ({binary_bytes_per_sec}) {wide_msg} " ,
169
+ " └ {bar:20 } {msg} ( {binary_bytes}/{binary_total_bytes}) " ,
167
170
)
168
171
. unwrap ( )
169
172
) ;
173
+ total_byte_bar. set_prefix ( "Total" ) ;
174
+ total_byte_bar. set_style (
175
+ indicatif:: ProgressStyle :: default_bar ( )
176
+ . template ( "\n {prefix} {bar:30} {binary_bytes}/{binary_total_bytes} ({binary_bytes_per_sec}, {elapsed}/{duration})" )
177
+ . unwrap ( ) ,
178
+ ) ;
170
179
loop {
171
180
tokio:: select! {
172
181
// Always handle layer changes first.
@@ -186,6 +195,7 @@ async fn handle_layer_progress_print(
186
195
byte_bar. set_position( layer_size) ;
187
196
layers_bar. inc( 1 ) ;
188
197
total_read = total_read. saturating_add( layer_size) ;
198
+ total_byte_bar. set_position( total_read) ;
189
199
}
190
200
} else {
191
201
// If the receiver is disconnected, then we're done
@@ -200,6 +210,7 @@ async fn handle_layer_progress_print(
200
210
let bytes = layer_bytes. borrow( ) ;
201
211
if let Some ( bytes) = & * bytes {
202
212
byte_bar. set_position( bytes. fetched) ;
213
+ total_byte_bar. set_position( total_read + bytes. fetched) ;
203
214
}
204
215
}
205
216
}
@@ -250,11 +261,13 @@ pub(crate) async fn pull(
250
261
ostree_ext:: cli:: print_layer_status ( & prep) ;
251
262
let layers_to_fetch = prep. layers_to_fetch ( ) . collect :: < Result < Vec < _ > > > ( ) ?;
252
263
let n_layers_to_fetch = layers_to_fetch. len ( ) ;
264
+ let download_bytes: u64 = layers_to_fetch. iter ( ) . map ( |( l, _) | l. layer . size ( ) ) . sum ( ) ;
265
+
253
266
let printer = ( !quiet) . then ( || {
254
267
let layer_progress = imp. request_progress ( ) ;
255
268
let layer_byte_progress = imp. request_layer_progress ( ) ;
256
269
tokio:: task:: spawn ( async move {
257
- handle_layer_progress_print ( layer_progress, layer_byte_progress, n_layers_to_fetch)
270
+ handle_layer_progress_print ( layer_progress, layer_byte_progress, n_layers_to_fetch, download_bytes )
258
271
. await
259
272
} )
260
273
} ) ;
0 commit comments