diff --git a/radicle-fetch/src/lib.rs b/radicle-fetch/src/lib.rs index d457ba81..071f6a7f 100644 --- a/radicle-fetch/src/lib.rs +++ b/radicle-fetch/src/lib.rs @@ -9,6 +9,7 @@ mod refs; mod stage; mod state; +use gix_protocol::handshake; pub use handle::Handle; pub use policy::{Allowed, BlockList, Scope}; use radicle::storage::ReadRepository as _; @@ -62,10 +63,7 @@ where if local == remote { return Err(Error::ReplicateSelf); } - let handshake = handle - .transport - .handshake() - .map_err(|err| Error::Handshake { err })?; + let handshake = perform_handshake(handle)?; let state = FetchState::default(); // N.b. ensure that we ignore the local peer's key. @@ -99,10 +97,7 @@ where if *handle.local() == remote { return Err(Error::ReplicateSelf); } - let handshake = handle - .transport - .handshake() - .map_err(|err| Error::Handshake { err })?; + let handshake = perform_handshake(handle)?; let state = FetchState::default(); let result = state .run(handle, &handshake, limit, remote, None) @@ -116,3 +111,13 @@ where ); result } + +fn perform_handshake(handle: &mut Handle) -> Result +where + S: transport::ConnectionStream, +{ + handle.transport.handshake().map_err(|err| { + log::warn!(target: "fetch", "Failed to perform handshake: {err}"); + Error::Handshake { err } + }) +}