Migrate from failure to anyhow/thiserror (#273)

This commit is contained in:
Roey Darwish Dror
2019-12-11 23:05:38 +02:00
committed by GitHub
parent 1ea9b91e11
commit ba516aa1dd
22 changed files with 259 additions and 335 deletions

View File

@@ -1,4 +1,4 @@
use crate::error::{Error, ErrorKind};
use crate::error::TopgradeError;
use crate::executor::RunType;
use crate::terminal::print_separator;
use crate::utils::require_option;
@@ -6,7 +6,7 @@ use failure::ResultExt;
use std::path::PathBuf;
use std::process::Command;
pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
print_separator("DrgaonFly BSD Packages");
run_type
@@ -15,7 +15,7 @@ pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(),
.check_run()
}
pub fn audit_packages(sudo: &Option<PathBuf>) -> Result<(), Error> {
pub fn audit_packages(sudo: &Option<PathBuf>) -> Result<()> {
if let Some(sudo) = sudo {
println!();
Command::new(sudo)

View File

@@ -1,4 +1,4 @@
use crate::error::{Error, ErrorKind};
use crate::error::TopgradeError;
use crate::executor::RunType;
use crate::terminal::print_separator;
use crate::utils::require_option;
@@ -6,7 +6,7 @@ use failure::ResultExt;
use std::path::PathBuf;
use std::process::Command;
pub fn upgrade_freebsd(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn upgrade_freebsd(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
print_separator("FreeBSD Update");
run_type
@@ -15,13 +15,13 @@ pub fn upgrade_freebsd(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(),
.check_run()
}
pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
print_separator("FreeBSD Packages");
run_type.execute(sudo).args(&["/usr/sbin/pkg", "upgrade"]).check_run()
}
pub fn audit_packages(sudo: &Option<PathBuf>) -> Result<(), Error> {
pub fn audit_packages(sudo: &Option<PathBuf>) -> Result<()> {
if let Some(sudo) = sudo {
println!();
Command::new(sudo)

View File

@@ -1,9 +1,9 @@
use crate::config::Config;
use crate::error::{Error, ErrorKind};
use crate::error::{SkipStep, TopgradeError};
use crate::executor::{ExecutorExitStatus, RunType};
use crate::terminal::{print_separator, print_warning};
use crate::utils::{require, require_option, which, PathExt};
use failure::ResultExt;
use anyhow::Result;
use ini::Ini;
use log::debug;
use serde::Deserialize;
@@ -37,7 +37,7 @@ pub enum Distribution {
}
impl Distribution {
fn parse_os_release(os_release: &ini::Ini) -> Result<Self, Error> {
fn parse_os_release(os_release: &ini::Ini) -> Result<Self> {
let section = os_release.general_section();
let id = section.get("ID").map(String::as_str);
let id_like: Option<Vec<&str>> = section
@@ -65,22 +65,22 @@ impl Distribution {
Some("gentoo") => Distribution::Gentoo,
Some("exherbo") => Distribution::Exherbo,
Some("nixos") => Distribution::NixOS,
_ => return Err(ErrorKind::UnknownLinuxDistribution.into()),
_ => return Err(TopgradeError::UnknownLinuxDistribution.into()),
})
}
pub fn detect() -> Result<Self, Error> {
pub fn detect() -> Result<Self> {
if PathBuf::from(OS_RELEASE_PATH).exists() {
let os_release = Ini::load_from_file(OS_RELEASE_PATH).context(ErrorKind::UnknownLinuxDistribution)?;
let os_release = Ini::load_from_file(OS_RELEASE_PATH)?;
return Self::parse_os_release(&os_release);
}
Err(ErrorKind::UnknownLinuxDistribution.into())
Err(TopgradeError::UnknownLinuxDistribution.into())
}
#[must_use]
pub fn upgrade(self, sudo: &Option<PathBuf>, run_type: RunType, config: &Config) -> Result<(), Error> {
pub fn upgrade(self, sudo: &Option<PathBuf>, run_type: RunType, config: &Config) -> Result<()> {
print_separator("System update");
let yes = config.yes();
@@ -134,7 +134,7 @@ fn upgrade_arch_linux(
run_type: RunType,
yes: bool,
yay_arguments: &str,
) -> Result<(), Error> {
) -> Result<()> {
let pacman = which("powerpill").unwrap_or_else(|| PathBuf::from("/usr/bin/pacman"));
let path = {
@@ -197,7 +197,7 @@ fn upgrade_arch_linux(
Ok(())
}
fn upgrade_redhat(sudo: &Option<PathBuf>, run_type: RunType, yes: bool) -> Result<(), Error> {
fn upgrade_redhat(sudo: &Option<PathBuf>, run_type: RunType, yes: bool) -> Result<()> {
if let Some(sudo) = &sudo {
let mut command = run_type.execute(&sudo);
command
@@ -219,7 +219,7 @@ fn upgrade_redhat(sudo: &Option<PathBuf>, run_type: RunType, yes: bool) -> Resul
Ok(())
}
fn upgrade_suse(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error> {
fn upgrade_suse(sudo: &Option<PathBuf>, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
run_type
.execute(&sudo)
@@ -237,7 +237,7 @@ fn upgrade_suse(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error>
Ok(())
}
fn upgrade_void(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error> {
fn upgrade_void(sudo: &Option<PathBuf>, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
for _ in 0..2 {
run_type
@@ -252,7 +252,7 @@ fn upgrade_void(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error>
Ok(())
}
fn upgrade_gentoo(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error> {
fn upgrade_gentoo(sudo: &Option<PathBuf>, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
if let Some(layman) = which("layman") {
run_type.execute(&sudo).arg(layman).args(&["-s", "ALL"]).check_run()?;
@@ -281,7 +281,7 @@ fn upgrade_gentoo(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error
Ok(())
}
fn upgrade_debian(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType, yes: bool) -> Result<(), Error> {
fn upgrade_debian(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType, yes: bool) -> Result<()> {
if let Some(sudo) = &sudo {
let apt = which("apt-fast").unwrap_or_else(|| PathBuf::from("/usr/bin/apt"));
run_type.execute(&sudo).arg(&apt).arg("update").check_run()?;
@@ -310,7 +310,7 @@ fn upgrade_debian(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType, yes:
Ok(())
}
fn upgrade_solus(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error> {
fn upgrade_solus(sudo: &Option<PathBuf>, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
run_type
.execute(&sudo)
@@ -323,7 +323,7 @@ fn upgrade_solus(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error>
Ok(())
}
fn upgrade_clearlinux(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), Error> {
fn upgrade_clearlinux(sudo: &Option<PathBuf>, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
run_type
.execute(&sudo)
@@ -336,7 +336,7 @@ fn upgrade_clearlinux(sudo: &Option<PathBuf>, run_type: RunType) -> Result<(), E
Ok(())
}
fn upgrade_exherbo(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) -> Result<(), Error> {
fn upgrade_exherbo(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
run_type.execute(&sudo).args(&["/usr/bin/cave", "sync"]).check_run()?;
@@ -368,7 +368,7 @@ fn upgrade_exherbo(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) ->
Ok(())
}
fn upgrade_nixos(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) -> Result<(), Error> {
fn upgrade_nixos(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) -> Result<()> {
if let Some(sudo) = &sudo {
run_type
.execute(&sudo)
@@ -388,7 +388,7 @@ fn upgrade_nixos(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType) -> Re
Ok(())
}
pub fn run_needrestart(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn run_needrestart(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
let needrestart = require("needrestart")?;
@@ -400,7 +400,7 @@ pub fn run_needrestart(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(),
}
#[must_use]
pub fn run_fwupdmgr(run_type: RunType) -> Result<(), Error> {
pub fn run_fwupdmgr(run_type: RunType) -> Result<()> {
let fwupdmgr = require("fwupdmgr")?;
print_separator("Firmware upgrades");
@@ -410,7 +410,7 @@ pub fn run_fwupdmgr(run_type: RunType) -> Result<(), Error> {
if let ExecutorExitStatus::Wet(e) = exit_status {
if !(e.success() || e.code().map(|c| c == 2).unwrap_or(false)) {
return Err(ErrorKind::ProcessFailed(e).into());
return Err(TopgradeError::ProcessFailed(e).into());
}
}
@@ -418,7 +418,7 @@ pub fn run_fwupdmgr(run_type: RunType) -> Result<(), Error> {
}
#[must_use]
pub fn flatpak_update(run_type: RunType) -> Result<(), Error> {
pub fn flatpak_update(run_type: RunType) -> Result<()> {
let flatpak = require("flatpak")?;
print_separator("Flatpak User Packages");
@@ -433,12 +433,12 @@ pub fn flatpak_update(run_type: RunType) -> Result<(), Error> {
}
#[must_use]
pub fn run_snap(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn run_snap(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
let snap = require("snap")?;
if !PathBuf::from("/var/snapd.socket").exists() && !PathBuf::from("/run/snapd.socket").exists() {
return Err(ErrorKind::SkipStep.into());
return Err(SkipStep.into());
}
print_separator("snap");
@@ -446,7 +446,7 @@ pub fn run_snap(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error>
}
#[must_use]
pub fn run_rpi_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn run_rpi_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
let rpi_update = require("rpi-update")?;
@@ -456,7 +456,7 @@ pub fn run_rpi_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), E
}
#[must_use]
pub fn run_pihole_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn run_pihole_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
let pihole = require("pihole")?;
@@ -466,7 +466,7 @@ pub fn run_pihole_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()
}
#[must_use]
pub fn run_etc_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<(), Error> {
pub fn run_etc_update(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
let sudo = require_option(sudo)?;
let etc_update = require("etc-update")?;
print_separator("etc-update");

View File

@@ -1,9 +1,9 @@
use crate::error::Error;
use crate::executor::RunType;
use crate::terminal::print_separator;
use anyhow::Result;
#[must_use]
pub fn upgrade_macos(run_type: RunType) -> Result<(), Error> {
pub fn upgrade_macos(run_type: RunType) -> Result<()> {
print_separator("App Store");
run_type

View File

@@ -1,15 +1,15 @@
use crate::error::Error;
#[cfg(target_os = "linux")]
use crate::error::ErrorKind;
use crate::error::SkipStep;
use crate::executor::{CommandExt, RunType};
use crate::terminal::print_separator;
use crate::utils::{require, PathExt};
use anyhow::Result;
use directories::BaseDirs;
use std::env;
use std::path::{Path, PathBuf};
use std::process::Command;
pub fn run_fisher(base_dirs: &BaseDirs, run_type: RunType) -> Result<(), Error> {
pub fn run_fisher(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
let fish = require("fish")?;
base_dirs
.home_dir()
@@ -26,7 +26,7 @@ pub fn run_fisher(base_dirs: &BaseDirs, run_type: RunType) -> Result<(), Error>
}
#[must_use]
pub fn run_homebrew(cleanup: bool, run_type: RunType) -> Result<(), Error> {
pub fn run_homebrew(cleanup: bool, run_type: RunType) -> Result<()> {
let brew = require("brew")?;
print_separator("Brew");
@@ -52,7 +52,7 @@ pub fn run_homebrew(cleanup: bool, run_type: RunType) -> Result<(), Error> {
}
#[must_use]
pub fn run_nix(run_type: RunType) -> Result<(), Error> {
pub fn run_nix(run_type: RunType) -> Result<()> {
let nix = require("nix")?;
let nix_channel = require("nix-channel")?;
let nix_env = require("nix-env")?;
@@ -65,7 +65,7 @@ pub fn run_nix(run_type: RunType) -> Result<(), Error> {
if let Ok(Distribution::NixOS) = Distribution::detect() {
debug!("Nix on NixOS must be upgraded via 'nixos-rebuild switch', skipping.");
return Err(ErrorKind::SkipStep.into());
return Err(SkipStep.into());
}
}
@@ -74,21 +74,21 @@ pub fn run_nix(run_type: RunType) -> Result<(), Error> {
run_type.execute(&nix_env).arg("--upgrade").check_run()
}
pub fn run_home_manager(run_type: RunType) -> Result<(), Error> {
pub fn run_home_manager(run_type: RunType) -> Result<()> {
let home_manager = require("home-manager")?;
print_separator("home-manager");
run_type.execute(&home_manager).arg("switch").check_run()
}
pub fn run_pearl(run_type: RunType) -> Result<(), Error> {
pub fn run_pearl(run_type: RunType) -> Result<()> {
let pearl = require("pearl")?;
print_separator("pearl");
run_type.execute(&pearl).arg("update").check_run()
}
pub fn run_sdkman(base_dirs: &BaseDirs, cleanup: bool, run_type: RunType) -> Result<(), Error> {
pub fn run_sdkman(base_dirs: &BaseDirs, cleanup: bool, run_type: RunType) -> Result<()> {
let bash = require("bash")?;
let sdkman_init_path = env::var("SDKMAN_DIR")

View File

@@ -1,17 +1,18 @@
use crate::error::{Error, ErrorKind};
use crate::error::SkipStep;
use crate::executor::{CommandExt, RunType};
use crate::terminal::print_separator;
use crate::utils::require;
use anyhow::Result;
use std::process::Command;
pub fn run_chocolatey(run_type: RunType) -> Result<(), Error> {
pub fn run_chocolatey(run_type: RunType) -> Result<()> {
let choco = require("choco")?;
print_separator("Chocolatey");
run_type.execute(&choco).args(&["upgrade", "all"]).check_run()
}
pub fn run_scoop(run_type: RunType) -> Result<(), Error> {
pub fn run_scoop(run_type: RunType) -> Result<()> {
let scoop = require("scoop")?;
print_separator("Scoop");
@@ -20,12 +21,12 @@ pub fn run_scoop(run_type: RunType) -> Result<(), Error> {
run_type.execute(&scoop).args(&["update", "*"]).check_run()
}
pub fn run_wsl_topgrade(run_type: RunType) -> Result<(), Error> {
pub fn run_wsl_topgrade(run_type: RunType) -> Result<()> {
let wsl = require("wsl")?;
let topgrade = Command::new(&wsl)
.args(&["bash", "-l", "which", "topgrade"])
.check_output()
.map_err(|_| ErrorKind::SkipStep)?;
.map_err(|_| SkipStep)?;
run_type
.execute(&wsl)