Implement cleanup for Debian based distros (#102)

This commit is contained in:
Christopher Medlin
2018-12-16 23:22:59 -08:00
committed by Roey Darwish Dror
parent 88ab17cfc3
commit 66c6338b42
2 changed files with 21 additions and 4 deletions

View File

@@ -59,14 +59,14 @@ impl Distribution {
} }
#[must_use] #[must_use]
pub fn upgrade(self, sudo: &Option<PathBuf>, dry_run: bool) -> Option<(&'static str, bool)> { pub fn upgrade(self, sudo: &Option<PathBuf>, cleanup: bool, dry_run: bool) -> Option<(&'static str, bool)> {
print_separator("System update"); print_separator("System update");
let success = match self { let success = match self {
Distribution::Arch => upgrade_arch_linux(&sudo, dry_run), Distribution::Arch => upgrade_arch_linux(&sudo, dry_run),
Distribution::CentOS => upgrade_redhat(&sudo, dry_run), Distribution::CentOS => upgrade_redhat(&sudo, dry_run),
Distribution::Fedora => upgrade_fedora(&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::Gentoo => upgrade_gentoo(&sudo, dry_run),
Distribution::OpenSuse => upgrade_opensuse(&sudo, dry_run), Distribution::OpenSuse => upgrade_opensuse(&sudo, dry_run),
Distribution::Void => upgrade_void(&sudo, dry_run), Distribution::Void => upgrade_void(&sudo, dry_run),
@@ -228,7 +228,7 @@ fn upgrade_gentoo(sudo: &Option<PathBuf>, dry_run: bool) -> Result<(), Error> {
Ok(()) Ok(())
} }
fn upgrade_debian(sudo: &Option<PathBuf>, dry_run: bool) -> Result<(), Error> { fn upgrade_debian(sudo: &Option<PathBuf>, cleanup: bool, dry_run: bool) -> Result<(), Error> {
if let Some(sudo) = &sudo { if let Some(sudo) = &sudo {
Executor::new(&sudo, dry_run) Executor::new(&sudo, dry_run)
.args(&["/usr/bin/apt", "update"]) .args(&["/usr/bin/apt", "update"])
@@ -241,6 +241,20 @@ fn upgrade_debian(sudo: &Option<PathBuf>, dry_run: bool) -> Result<(), Error> {
.spawn()? .spawn()?
.wait()? .wait()?
.check()?; .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 { } else {
print_warning("No sudo detected. Skipping system upgrade"); print_warning("No sudo detected. Skipping system upgrade");
} }

View File

@@ -116,7 +116,10 @@ fn run() -> Result<(), Error> {
if !opt.no_system { if !opt.no_system {
match &distribution { match &distribution {
Ok(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) => { Err(e) => {
println!("Error detecting current distribution: {}", e); println!("Error detecting current distribution: {}", e);