improve error handling
This commit is contained in:
+5
-4
@@ -21,14 +21,15 @@ impl Backend for Rust {
|
|||||||
impl_backend_constants!();
|
impl_backend_constants!();
|
||||||
|
|
||||||
fn get_all_installed_packages(&self) -> Result<HashSet<Package>> {
|
fn get_all_installed_packages(&self) -> Result<HashSet<Package>> {
|
||||||
let file = get_crates_file().unwrap();
|
let file = get_crates_file().context("getting path to crates file")?;
|
||||||
let content = read_to_string(file).unwrap();
|
let content = read_to_string(file).context("reading crates file")?;
|
||||||
let json: Value = serde_json::from_str(&content).unwrap();
|
let json: Value = serde_json::from_str(&content).context("parsing JSON")?;
|
||||||
extract_packages(json)
|
extract_packages(json).context("extracing packages from JSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_explicitly_installed_packages(&self) -> Result<HashSet<Package>> {
|
fn get_explicitly_installed_packages(&self) -> Result<HashSet<Package>> {
|
||||||
self.get_all_installed_packages()
|
self.get_all_installed_packages()
|
||||||
|
.context("getting all installed packages")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-4
@@ -4,8 +4,9 @@ use anyhow::{ensure, Context, Result};
|
|||||||
use clap::ArgMatches;
|
use clap::ArgMatches;
|
||||||
|
|
||||||
use crate::action;
|
use crate::action;
|
||||||
use crate::backend::{Backends, ToDoPerBackend};
|
use crate::backend::{Backend, Backends, ToDoPerBackend};
|
||||||
use crate::cmd::run_edit_command;
|
use crate::cmd::run_edit_command;
|
||||||
|
use crate::env::get_single_var;
|
||||||
use crate::ui::get_user_confirmation;
|
use crate::ui::get_user_confirmation;
|
||||||
use crate::Group;
|
use crate::Group;
|
||||||
|
|
||||||
@@ -32,7 +33,9 @@ impl Pacdef {
|
|||||||
Some((action::UNMANAGED, _)) => Ok(self.show_unmanaged_packages()),
|
Some((action::UNMANAGED, _)) => Ok(self.show_unmanaged_packages()),
|
||||||
Some((action::VERSION, _)) => Ok(self.show_version()),
|
Some((action::VERSION, _)) => Ok(self.show_version()),
|
||||||
Some((_, _)) => todo!(),
|
Some((_, _)) => todo!(),
|
||||||
None => unreachable!(),
|
None => {
|
||||||
|
unreachable!("argument parser requires some subcommand to return an `ArgMatches`")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +47,7 @@ impl Pacdef {
|
|||||||
|
|
||||||
match backend.get_missing_packages_sorted() {
|
match backend.get_missing_packages_sorted() {
|
||||||
Ok(diff) => to_install.push((backend, diff)),
|
Ok(diff) => to_install.push((backend, diff)),
|
||||||
Err(e) => println!("WARNING: skipping backend '{}': {e}", backend.get_section()),
|
Err(error) => show_error(error, backend),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +126,7 @@ impl Pacdef {
|
|||||||
|
|
||||||
match backend.get_unmanaged_packages_sorted() {
|
match backend.get_unmanaged_packages_sorted() {
|
||||||
Ok(unmanaged) => result.push((backend, unmanaged)),
|
Ok(unmanaged) => result.push((backend, unmanaged)),
|
||||||
Err(e) => println!("WARNING: skipping backend '{}': {e}", backend.get_section()),
|
Err(error) => show_error(error, backend),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
result
|
result
|
||||||
@@ -165,3 +168,15 @@ impl Pacdef {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn show_error(error: anyhow::Error, backend: Box<dyn Backend>) {
|
||||||
|
let section = backend.get_section();
|
||||||
|
match get_single_var("RUST_BACKTRACE") {
|
||||||
|
Some(s) => {
|
||||||
|
if s == "1" || s == "full" {
|
||||||
|
println!("WARNING: skipping backend '{section}': {error:?}\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => println!("WARNING: skipping backend '{section}': {error}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ pub(crate) fn get_editor() -> Result<String> {
|
|||||||
fn check_vars_in_order(vars: &[&str]) -> Option<String> {
|
fn check_vars_in_order(vars: &[&str]) -> Option<String> {
|
||||||
vars.iter().flat_map(|v| var(v).ok()).next()
|
vars.iter().flat_map(|v| var(v).ok()).next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_single_var(variable: &str) -> Option<String> {
|
||||||
|
var(variable).ok()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user