diff --git a/src/linux.rs b/src/linux.rs index 6fccefd1..5f8be0ba 100644 --- a/src/linux.rs +++ b/src/linux.rs @@ -59,14 +59,14 @@ impl Distribution { } #[must_use] - pub fn upgrade(self, sudo: &Option, dry_run: bool) -> Option<(&'static str, bool)> { + pub fn upgrade(self, sudo: &Option, cleanup: bool, dry_run: bool) -> Option<(&'static str, bool)> { print_separator("System update"); let success = match self { Distribution::Arch => upgrade_arch_linux(&sudo, dry_run), Distribution::CentOS => upgrade_redhat(&sudo, dry_run), Distribution::Fedora => upgrade_fedora(&sudo, dry_run), - Distribution::Ubuntu | Distribution::Debian => upgrade_debian(&sudo, dry_run), + Distribution::Ubuntu | Distribution::Debian => upgrade_debian(&sudo, cleanup, dry_run), Distribution::Gentoo => upgrade_gentoo(&sudo, dry_run), Distribution::OpenSuse => upgrade_opensuse(&sudo, dry_run), Distribution::Void => upgrade_void(&sudo, dry_run), @@ -228,7 +228,7 @@ fn upgrade_gentoo(sudo: &Option, dry_run: bool) -> Result<(), Error> { Ok(()) } -fn upgrade_debian(sudo: &Option, dry_run: bool) -> Result<(), Error> { +fn upgrade_debian(sudo: &Option, cleanup: bool, dry_run: bool) -> Result<(), Error> { if let Some(sudo) = &sudo { Executor::new(&sudo, dry_run) .args(&["/usr/bin/apt", "update"]) @@ -241,6 +241,20 @@ fn upgrade_debian(sudo: &Option, dry_run: bool) -> Result<(), Error> { .spawn()? .wait()? .check()?; + + if cleanup { + Executor::new(&sudo, dry_run) + .args(&["/usr/bin/apt", "clean"]) + .spawn()? + .wait()? + .check()?; + + Executor::new(&sudo, dry_run) + .args(&["/usr/bin/apt", "autoremove"]) + .spawn()? + .wait()? + .check()?; + } } else { print_warning("No sudo detected. Skipping system upgrade"); } diff --git a/src/main.rs b/src/main.rs index d33122e2..b0fb4ae4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -116,7 +116,10 @@ fn run() -> Result<(), Error> { if !opt.no_system { match &distribution { Ok(distribution) => { - report.push_result(execute(|| distribution.upgrade(&sudo, opt.dry_run), opt.no_retry)?); + report.push_result(execute( + || distribution.upgrade(&sudo, opt.cleanup, opt.dry_run), + opt.no_retry, + )?); } Err(e) => { println!("Error detecting current distribution: {}", e);