From 88d94a2d43732d0c2cfa61e0006acf4a23df460c Mon Sep 17 00:00:00 2001 From: Stephan Dilly Date: Tue, 31 Aug 2021 18:14:26 +0200 Subject: [PATCH] more logging on any fails inside async fetch --- asyncgit/src/error.rs | 6 ++++ asyncgit/src/fetch.rs | 73 +++++++++++++++++++++++++++---------------- 2 files changed, 52 insertions(+), 27 deletions(-) diff --git a/asyncgit/src/error.rs b/asyncgit/src/error.rs index fe7bc214..e221bf8c 100644 --- a/asyncgit/src/error.rs +++ b/asyncgit/src/error.rs @@ -61,3 +61,9 @@ impl From> for Error { Self::Generic(format!("send error: {}", error)) } } + +impl From> for Error { + fn from(error: Box) -> Self { + Self::Generic(format!("any error: {:?}", error)) + } +} diff --git a/asyncgit/src/fetch.rs b/asyncgit/src/fetch.rs index ed8caa6c..effcac1d 100644 --- a/asyncgit/src/fetch.rs +++ b/asyncgit/src/fetch.rs @@ -67,9 +67,10 @@ impl AsyncFetch { /// pub fn request(&mut self, params: FetchRequest) -> Result<()> { - log::trace!("request"); + log::trace!("request: {}/{}", params.remote, params.branch); if self.is_pending()? { + log::trace!("request ignored, still pending"); return Ok(()); } @@ -82,35 +83,18 @@ impl AsyncFetch { let sender = self.sender.clone(); thread::spawn(move || { - let (progress_sender, receiver) = unbounded(); - - let handle = RemoteProgress::spawn_receiver_thread( - AsyncGitNotification::Fetch, - sender.clone(), - receiver, + let res = Self::threaded_fetch( + sender, arc_progress, + params, + arc_res, + arc_state, ); - let res = fetch( - CWD, - ¶ms.branch, - params.basic_credential, - Some(progress_sender.clone()), - ); - - progress_sender - .send(ProgressNotification::Done) - .expect("closing send failed"); - - handle.join().expect("joining thread failed"); - - Self::set_result(&arc_res, res).expect("result error"); - - Self::clear_request(&arc_state).expect("clear error"); - - sender - .send(AsyncGitNotification::Fetch) - .expect("AsyncNotification error"); + if let Err(e) = res { + log::error!("async fetch: {}", e); + panic!("{}", e); + } }); Ok(()) @@ -156,4 +140,39 @@ impl AsyncFetch { Ok(()) } + + fn threaded_fetch( + sender: Sender, + arc_progress: Arc>>, + params: FetchRequest, + arc_res: Arc>>, + arc_state: Arc>>, + ) -> Result<()> { + let (progress_sender, receiver) = unbounded(); + + let handle = RemoteProgress::spawn_receiver_thread( + AsyncGitNotification::Fetch, + sender.clone(), + receiver, + arc_progress, + ); + + let res = fetch( + CWD, + ¶ms.branch, + params.basic_credential, + Some(progress_sender.clone()), + ); + + progress_sender.send(ProgressNotification::Done)?; + + handle.join()?; + + Self::set_result(&arc_res, res)?; + Self::clear_request(&arc_state)?; + + sender.send(AsyncGitNotification::Fetch)?; + + Ok(()) + } }