diff --git a/eden/scm/lib/doctor/network/Cargo.toml b/eden/scm/lib/doctor/network/Cargo.toml index 8096984a12..b577e968c5 100644 --- a/eden/scm/lib/doctor/network/Cargo.toml +++ b/eden/scm/lib/doctor/network/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" [dependencies] auth = { version = "0.1.0", path = "../../auth" } configmodel = { version = "0.1.0", path = "../../configmodel" } +curl = { version = "0.4.41", features = ["http2"] } hg-http = { version = "0.1.0", path = "../../hg-http" } http = "0.2" http-client = { version = "0.1.0", path = "../../http-client" } diff --git a/eden/scm/lib/doctor/network/src/lib.rs b/eden/scm/lib/doctor/network/src/lib.rs index 3ed40dd081..c87cc51018 100644 --- a/eden/scm/lib/doctor/network/src/lib.rs +++ b/eden/scm/lib/doctor/network/src/lib.rs @@ -152,7 +152,18 @@ fn diagnose_http_error(config: &dyn Config, err: &HttpError) -> String { ), HttpError::InvalidCert(err, _) => maybe_append_help(format!("{}", err), "tlsauthhelp"), HttpError::MissingCerts(err) => maybe_append_help(format!("{}", err), "tlsauthhelp"), - _ => format!("{}", err), + HttpError::RequestFailure(HttpClientError::Curl(err)) => diagnose_curl_error(err), + + HttpError::Config(err) => err.to_string(), + HttpError::RequestFailure(_) => format!("{}", err), + } +} + +fn diagnose_curl_error(err: &curl::Error) -> String { + if err.is_operation_timedout() { + "Network timeout. Please check your connection.".to_string() + } else { + format!("{}", err) } }