mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Split the cargo::util::network
module into submodules
This is intended to help grow with more stuff.
This commit is contained in:
parent
4a60ff78a5
commit
b5d772f303
@ -28,7 +28,7 @@ use crate::ops;
|
|||||||
use crate::util::config::PackageCacheLock;
|
use crate::util::config::PackageCacheLock;
|
||||||
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
||||||
use crate::util::interning::InternedString;
|
use crate::util::interning::InternedString;
|
||||||
use crate::util::network::Retry;
|
use crate::util::network::retry::Retry;
|
||||||
use crate::util::{self, internal, Config, Progress, ProgressStyle};
|
use crate::util::{self, internal, Config, Progress, ProgressStyle};
|
||||||
|
|
||||||
pub const MANIFEST_PREAMBLE: &str = "\
|
pub const MANIFEST_PREAMBLE: &str = "\
|
||||||
|
@ -29,7 +29,7 @@ pub fn with_retry_and_progress(
|
|||||||
) -> CargoResult<()> {
|
) -> CargoResult<()> {
|
||||||
std::thread::scope(|s| {
|
std::thread::scope(|s| {
|
||||||
let mut progress_bar = Progress::new("Fetch", config);
|
let mut progress_bar = Progress::new("Fetch", config);
|
||||||
network::with_retry(config, || {
|
network::retry::with_retry(config, || {
|
||||||
let progress_root: Arc<gix::progress::tree::Root> =
|
let progress_root: Arc<gix::progress::tree::Root> =
|
||||||
gix::progress::tree::root::Options {
|
gix::progress::tree::root::Options {
|
||||||
initial_capacity: 10,
|
initial_capacity: 10,
|
||||||
|
@ -739,7 +739,7 @@ pub fn with_fetch_options(
|
|||||||
let ssh_config = config.net_config()?.ssh.as_ref();
|
let ssh_config = config.net_config()?.ssh.as_ref();
|
||||||
let config_known_hosts = ssh_config.and_then(|ssh| ssh.known_hosts.as_ref());
|
let config_known_hosts = ssh_config.and_then(|ssh| ssh.known_hosts.as_ref());
|
||||||
let diagnostic_home_config = config.diagnostic_home_config();
|
let diagnostic_home_config = config.diagnostic_home_config();
|
||||||
network::with_retry(config, || {
|
network::retry::with_retry(config, || {
|
||||||
with_authentication(config, url, git_config, |f| {
|
with_authentication(config, url, git_config, |f| {
|
||||||
let port = Url::parse(url).ok().and_then(|url| url.port());
|
let port = Url::parse(url).ok().and_then(|url| url.port());
|
||||||
let mut last_update = Instant::now();
|
let mut last_update = Instant::now();
|
||||||
|
@ -8,7 +8,7 @@ use crate::sources::registry::download;
|
|||||||
use crate::sources::registry::MaybeLock;
|
use crate::sources::registry::MaybeLock;
|
||||||
use crate::sources::registry::{LoadResponse, RegistryConfig, RegistryData};
|
use crate::sources::registry::{LoadResponse, RegistryConfig, RegistryData};
|
||||||
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
||||||
use crate::util::network::Retry;
|
use crate::util::network::retry::Retry;
|
||||||
use crate::util::{auth, Config, Filesystem, IntoUrl, Progress, ProgressStyle};
|
use crate::util::{auth, Config, Filesystem, IntoUrl, Progress, ProgressStyle};
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use cargo_util::paths;
|
use cargo_util::paths;
|
||||||
|
37
src/cargo/util/network/mod.rs
Normal file
37
src/cargo/util/network/mod.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
//! Utilities for networking.
|
||||||
|
|
||||||
|
use std::task::Poll;
|
||||||
|
|
||||||
|
pub mod retry;
|
||||||
|
|
||||||
|
pub trait PollExt<T> {
|
||||||
|
fn expect(self, msg: &str) -> T;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> PollExt<T> for Poll<T> {
|
||||||
|
#[track_caller]
|
||||||
|
fn expect(self, msg: &str) -> T {
|
||||||
|
match self {
|
||||||
|
Poll::Ready(val) => val,
|
||||||
|
Poll::Pending => panic!("{}", msg),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When dynamically linked against libcurl, we want to ignore some failures
|
||||||
|
// when using old versions that don't support certain features.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! try_old_curl {
|
||||||
|
($e:expr, $msg:expr) => {
|
||||||
|
let result = $e;
|
||||||
|
if cfg!(target_os = "macos") {
|
||||||
|
if let Err(e) = result {
|
||||||
|
warn!("ignoring libcurl {} error: {}", $msg, e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.with_context(|| {
|
||||||
|
anyhow::format_err!("failed to enable {}, is curl not built right?", $msg)
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -1,22 +1,9 @@
|
|||||||
|
//! Utilities for retrying a network operation.
|
||||||
|
|
||||||
use anyhow::Error;
|
use anyhow::Error;
|
||||||
|
|
||||||
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
use crate::util::errors::{CargoResult, HttpNotSuccessful};
|
||||||
use crate::util::Config;
|
use crate::util::Config;
|
||||||
use std::task::Poll;
|
|
||||||
|
|
||||||
pub trait PollExt<T> {
|
|
||||||
fn expect(self, msg: &str) -> T;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> PollExt<T> for Poll<T> {
|
|
||||||
#[track_caller]
|
|
||||||
fn expect(self, msg: &str) -> T {
|
|
||||||
match self {
|
|
||||||
Poll::Ready(val) => val,
|
|
||||||
Poll::Pending => panic!("{}", msg),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Retry<'a> {
|
pub struct Retry<'a> {
|
||||||
config: &'a Config,
|
config: &'a Config,
|
||||||
@ -105,7 +92,7 @@ fn maybe_spurious(err: &Error) -> bool {
|
|||||||
/// # let download_something = || return Ok(());
|
/// # let download_something = || return Ok(());
|
||||||
/// # let config = Config::default().unwrap();
|
/// # let config = Config::default().unwrap();
|
||||||
/// use cargo::util::network;
|
/// use cargo::util::network;
|
||||||
/// let cargo_result = network::with_retry(&config, || download_something());
|
/// let cargo_result = network::retry::with_retry(&config, || download_something());
|
||||||
/// ```
|
/// ```
|
||||||
pub fn with_retry<T, F>(config: &Config, mut callback: F) -> CargoResult<T>
|
pub fn with_retry<T, F>(config: &Config, mut callback: F) -> CargoResult<T>
|
||||||
where
|
where
|
||||||
@ -119,24 +106,6 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// When dynamically linked against libcurl, we want to ignore some failures
|
|
||||||
// when using old versions that don't support certain features.
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! try_old_curl {
|
|
||||||
($e:expr, $msg:expr) => {
|
|
||||||
let result = $e;
|
|
||||||
if cfg!(target_os = "macos") {
|
|
||||||
if let Err(e) = result {
|
|
||||||
warn!("ignoring libcurl {} error: {}", $msg, e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.with_context(|| {
|
|
||||||
anyhow::format_err!("failed to enable {}, is curl not built right?", $msg)
|
|
||||||
})?;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn with_retry_repeats_the_call_then_works() {
|
fn with_retry_repeats_the_call_then_works() {
|
||||||
use crate::core::Shell;
|
use crate::core::Shell;
|
Loading…
x
Reference in New Issue
Block a user