From ba0aa706e4fe42e7dd6906a76e09a778248a70f0 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Wed, 3 Feb 2021 09:32:57 -0800 Subject: [PATCH] Avoid panic when the release cache is empty --- install/src/command.rs | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/install/src/command.rs b/install/src/command.rs index 52f2c0b22b..475d35887f 100644 --- a/install/src/command.rs +++ b/install/src/command.rs @@ -817,26 +817,29 @@ pub fn gc(config_file: &str) -> Result<(), String> { .collect::>(); releases.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap()); // order by newest releases - let old_releases = releases.split_off(5); // Delete all but the 5 newest releases + const MAX_CACHE_LEN: usize = 5; + if releases.len() > MAX_CACHE_LEN { + let old_releases = releases.split_off(MAX_CACHE_LEN); - if !old_releases.is_empty() { - let progress_bar = new_spinner_progress_bar(); - progress_bar.set_length(old_releases.len() as u64); - progress_bar.set_style( - ProgressStyle::default_bar() - .template(&format!( - "{}{}{}", - "{spinner:.green} ", - RECYCLING, - "Removing old releases [{bar:40.cyan/blue}] {pos}/{len} ({eta})" - )) - .progress_chars("=> "), - ); - for (release, _modified_type) in old_releases { - progress_bar.inc(1); - let _ = fs::remove_dir_all(&release); + if !old_releases.is_empty() { + let progress_bar = new_spinner_progress_bar(); + progress_bar.set_length(old_releases.len() as u64); + progress_bar.set_style( + ProgressStyle::default_bar() + .template(&format!( + "{}{}{}", + "{spinner:.green} ", + RECYCLING, + "Removing old releases [{bar:40.cyan/blue}] {pos}/{len} ({eta})" + )) + .progress_chars("=> "), + ); + for (release, _modified_type) in old_releases { + progress_bar.inc(1); + let _ = fs::remove_dir_all(&release); + } + progress_bar.finish_and_clear(); } - progress_bar.finish_and_clear(); } Ok(())