summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-03-11 11:17:33 +0100
committerMatthias Beyer <matthias.beyer@atos.net>2021-03-11 11:40:45 +0100
commit540647ef5e911dc931092ecc420de6db1019707f (patch)
treedc2b47b17560d1d87c0300e62ff0331dbbdc54e7
parent5c51a9bdafda4987ab7da52b816e01ea6b56502d (diff)
Add more error context to config loading
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r--src/main.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs
index fed26d6..1aaaefb 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -51,6 +51,7 @@ extern crate diesel;
use std::path::PathBuf;
use anyhow::anyhow;
+use anyhow::Context;
use anyhow::Result;
use clap::ArgMatches;
use logcrate::debug;
@@ -93,14 +94,16 @@ async fn main() -> Result<()> {
.ok_or_else(|| anyhow!("Not a repository with working directory. Cannot do my job!"))?;
let mut config = ::config::Config::default();
- config.merge(::config::File::from(repo_path.join("config.toml")))?;
+ config.merge(::config::File::from(repo_path.join("config.toml")))
+ .context("Failed to load config.toml from repository")?;
{
let xdg = xdg::BaseDirectories::with_prefix("butido")?;
let xdg_config_file = xdg.find_config_file("config.toml");
if let Some(xdg_config) = xdg_config_file {
debug!("Configuration file found with XDG: {}", xdg_config.display());
- config.merge(::config::File::from(xdg_config))?;
+ config.merge(::config::File::from(xdg_config))
+ .context("Failed to load config.toml from XDG configuration directory")?;
} else {
debug!("No configuration file found with XDG: {}", xdg.get_config_home().display());
}
@@ -108,7 +111,10 @@ async fn main() -> Result<()> {
config.merge(::config::Environment::with_prefix("BUTIDO"))?;
- let config = config.try_into::<NotValidatedConfiguration>()?.validate()?;
+ let config = config.try_into::<NotValidatedConfiguration>()
+ .context("Failed to load Configuration object")?
+ .validate()
+ .context("Failed to validate configuration")?;
let hide_bars = cli.is_present("hide_bars") || crate::util::stdout_is_pipe();
let progressbars = ProgressBars::setup(