Skip to content

Commit

Permalink
Store maximum queue length
Browse files Browse the repository at this point in the history
Previously, the queue length was constantly decreasing as we built crates, which
meant that we were incorrectly displaying the progress bar. In debug builds,
this even led to panics (due to underflow on subtraction).
  • Loading branch information
Mark-Simulacrum committed Jan 25, 2020
1 parent b68b097 commit dc6d219
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/cargo/core/compiler/job_queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ pub struct JobQueue<'a, 'cfg> {
/// It is created from JobQueue when we have fully assembled the crate graph
/// (i.e., all package dependencies are known).
struct DrainState<'a, 'cfg> {
// This is the length of the DependencyQueue when starting out
total_units: usize,

queue: DependencyQueue<Unit<'a>, Artifact, Job>,
tx: Sender<Message>,
rx: Receiver<Message>,
Expand Down Expand Up @@ -341,6 +344,7 @@ impl<'a, 'cfg> JobQueue<'a, 'cfg> {
let (tx, rx) = channel();
let progress = Progress::with_style("Building", ProgressStyle::Ratio, cx.bcx.config);
let state = DrainState {
total_units: self.queue.len(),
queue: self.queue,
tx,
rx,
Expand Down Expand Up @@ -713,7 +717,7 @@ impl<'a, 'cfg> DrainState<'a, 'cfg> {
.collect::<Vec<_>>();
drop(self.progress.tick_now(
self.finished,
self.queue.len(),
self.total_units,
&format!(": {}", active_names.join(", ")),
));
}
Expand Down
1 change: 1 addition & 0 deletions src/cargo/util/progress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ impl<'cfg> State<'cfg> {

impl Format {
fn progress(&self, cur: usize, max: usize) -> Option<String> {
assert!(cur <= max);
// Render the percentage at the far right and then figure how long the
// progress bar is
let pct = (cur as f64) / (max as f64);
Expand Down

0 comments on commit dc6d219

Please sign in to comment.