From d5616b66052cd20cbfabbecc1f5f500f754e89a2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 25 Feb 2023 15:28:16 +0100 Subject: [PATCH] improve error handling and reporting of `ein t query` --- gitoxide-core/src/query/engine/update.rs | 5 +++-- gitoxide-core/src/query/mod.rs | 9 +++++++-- src/porcelain/main.rs | 3 ++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gitoxide-core/src/query/engine/update.rs b/gitoxide-core/src/query/engine/update.rs index be62bed73c..79ceafd4f6 100644 --- a/gitoxide-core/src/query/engine/update.rs +++ b/gitoxide-core/src/query/engine/update.rs @@ -22,6 +22,7 @@ pub fn update( repo: &gix::Repository, con: &mut rusqlite::Connection, progress: &mut impl gix::Progress, + mut err: impl std::io::Write, Options { object_cache_size_mb, find_copies_harder, @@ -294,7 +295,7 @@ pub fn update( } } if tx_stats.send(Ok((chunk_id, out_chunk))).is_err() { - break; + bail!("Thread failed to send result"); } } Ok(()) @@ -357,7 +358,7 @@ pub fn update( } } Err(gix::traverse::commit::ancestors::Error::FindExisting { .. }) => { - eprintln!("shallow repository - commit history is truncated"); + writeln!(err, "shallow repository - commit history is truncated").ok(); break; } Err(err) => return Err(err.into()), diff --git a/gitoxide-core/src/query/mod.rs b/gitoxide-core/src/query/mod.rs index 6583d12c95..9f1a376cef 100644 --- a/gitoxide-core/src/query/mod.rs +++ b/gitoxide-core/src/query/mod.rs @@ -15,9 +15,14 @@ mod db; mod engine; pub use engine::Command; -pub fn prepare(repo_dir: &std::path::Path, mut progress: impl gix::Progress, opts: Options) -> anyhow::Result { +pub fn prepare( + repo_dir: &std::path::Path, + mut progress: impl gix::Progress, + err: impl std::io::Write, + opts: Options, +) -> anyhow::Result { let repo = gix::discover(repo_dir)?; let mut con = db::create(repo.git_dir().join("ein.query"))?; - let commits = engine::update(&repo, &mut con, &mut progress, opts)?; + let commits = engine::update(&repo, &mut con, &mut progress, err, opts)?; Ok(Engine { repo, con, commits }) } diff --git a/src/porcelain/main.rs b/src/porcelain/main.rs index af390be939..c8e897b664 100644 --- a/src/porcelain/main.rs +++ b/src/porcelain/main.rs @@ -57,10 +57,11 @@ pub fn main() -> Result<()> { progress, progress_keep_open, crate::shared::STANDARD_RANGE, - move |mut progress, out, err| { + move |mut progress, out, mut err| { let engine = query::prepare( &repo_dir, &mut progress, + &mut err, query::Options { object_cache_size_mb, find_copies_harder,