Better fedora handling

This commit is contained in:
Roey Darwish Dror
2019-09-28 20:26:03 +03:00
parent fb38b792a4
commit 48e694cdd5
2 changed files with 18 additions and 10 deletions

View File

@@ -1,14 +1,14 @@
use crate::error::{Error, ErrorKind};
use crate::executor::RunType;
use crate::terminal::{print_separator, print_warning};
use crate::utils::{require, require_option, which};
use crate::utils::{require, require_option, which, PathExt};
use failure::ResultExt;
use ini::Ini;
use log::debug;
use serde::Deserialize;
use std::env::var_os;
use std::ffi::OsString;
use std::path::PathBuf;
use std::path::{Path, PathBuf};
use walkdir::WalkDir;
static OS_RELEASE_PATH: &str = "/etc/os-release";
@@ -80,8 +80,7 @@ impl Distribution {
match self {
Distribution::Arch => upgrade_arch_linux(&sudo, cleanup, run_type, yes),
Distribution::CentOS => upgrade_redhat(&sudo, run_type, yes, false),
Distribution::Fedora => upgrade_redhat(&sudo, run_type, yes, true),
Distribution::CentOS | Distribution::Fedora => upgrade_redhat(&sudo, run_type, yes),
Distribution::Debian => upgrade_debian(&sudo, cleanup, run_type, yes),
Distribution::Gentoo => upgrade_gentoo(&sudo, run_type),
Distribution::Suse => upgrade_suse(&sudo, run_type),
@@ -163,10 +162,16 @@ fn upgrade_arch_linux(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType,
Ok(())
}
fn upgrade_redhat(sudo: &Option<PathBuf>, run_type: RunType, yes: bool, dnf: bool) -> Result<(), Error> {
fn upgrade_redhat(sudo: &Option<PathBuf>, run_type: RunType, yes: bool) -> Result<(), Error> {
if let Some(sudo) = &sudo {
let mut command = run_type.execute(&sudo);
command.args(&[if dnf { "/usr/bin/dnf" } else { "/usr/bin/yum" }, "upgrade"]);
command
.arg(
Path::new("/usr/bin/dnf")
.if_exists()
.unwrap_or_else(|| Path::new("/usr/bin/yum")),
)
.arg("upgrade");
if yes {
command.arg("-y");
}

View File

@@ -38,9 +38,12 @@ where
fn require(self) -> Result<Self, Error>;
}
impl PathExt for PathBuf {
impl<T> PathExt for T
where
T: AsRef<Path>,
{
fn if_exists(self) -> Option<Self> {
if self.exists() {
if self.as_ref().exists() {
Some(self)
} else {
None
@@ -48,11 +51,11 @@ impl PathExt for PathBuf {
}
fn is_descendant_of(&self, ancestor: &Path) -> bool {
self.iter().zip(ancestor.iter()).all(|(a, b)| a == b)
self.as_ref().iter().zip(ancestor.iter()).all(|(a, b)| a == b)
}
fn require(self) -> Result<Self, Error> {
if self.exists() {
if self.as_ref().exists() {
Ok(self)
} else {
Err(ErrorKind::SkipStep.into())