From fe028a0e4b9c29982d116a83b906f5d8c9dd740a Mon Sep 17 00:00:00 2001 From: Josh McKinney Date: Wed, 8 Jan 2025 21:57:13 -0800 Subject: [PATCH] Replace error with warning --- src/cargo/util/toml/mod.rs | 18 ++++++++++-------- tests/testsuite/bad_config.rs | 23 +++++++++++++++++++++-- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index ea6a088cdf45..5768825e938a 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -4,7 +4,6 @@ use std::ffi::OsStr; use std::path::{Path, PathBuf}; use std::rc::Rc; use std::str::{self, FromStr}; -use tracing_subscriber::fmt::format; use crate::core::summary::MissingDependencyError; use crate::AlreadyPrintedError; @@ -2145,7 +2144,7 @@ fn to_dependency_source_id( .unwrap_or(GitReference::DefaultBranch); let loc = git.into_url()?; - bail_if_github_pull_request(&name_in_toml, &loc)?; + warn_if_github_pull_request(&name_in_toml, &loc, manifest_ctx.warnings); if let Some(fragment) = loc.fragment() { let msg = format!( @@ -2187,23 +2186,26 @@ fn to_dependency_source_id( /// Checks if the URL is a GitHub pull request URL. /// -/// If the URL is a GitHub pull request URL, an error is returned with a message that explains -/// how to specify a specific git revision. -fn bail_if_github_pull_request(name_in_toml: &str, url: &Url) -> CargoResult<()> { +/// If the URL is a GitHub pull request URL, an warning is emitted with a message that explains how +/// to specify a specific git revision. +/// +/// At some point in the future it might be worth considering making this a hard error, but for now +/// it's just a warning. See . +fn warn_if_github_pull_request(name_in_toml: &str, url: &Url, warnings: &mut Vec) { if url.host_str() != Some("github.com") { - return Ok(()); + return; } let path_components = url.path().split('/').collect::>(); if let ["", owner, repo, "pull", pr_number, ..] = path_components[..] { let repo_url = format!("https://github.com/{owner}/{repo}.git"); let rev = format!("refs/pull/{pr_number}/head"); - bail!( + let warning = format!( "dependency ({name_in_toml}) git url {url} is not a repository. \ The path looks like a pull request. Try replacing the dependency with: \ `git = \"{repo_url}\" rev = \"{rev}\"` in the dependency declaration.", ); + warnings.push(warning); } - Ok(()) } pub(crate) fn lookup_path_base<'a>( diff --git a/tests/testsuite/bad_config.rs b/tests/testsuite/bad_config.rs index 80f69e543a99..7b482b90779f 100644 --- a/tests/testsuite/bad_config.rs +++ b/tests/testsuite/bad_config.rs @@ -2173,10 +2173,29 @@ fn github_pull_request_url() { p.cargo("check -v") .with_status(101) .with_stderr_data(str![[r#" -[ERROR] failed to parse manifest at `[ROOT]/foo/Cargo.toml` +[WARNING] dependency (bar) git url https://github.com/foo/bar/pull/123 is not a repository. The path looks like a pull request. Try replacing the dependency with: `git = "https://github.com/foo/bar.git" rev = "refs/pull/123/head"` in the dependency declaration. +[UPDATING] git repository `https://github.com/foo/bar/pull/123` +[WARNING] spurious network error (3 tries remaining): unexpected http status code: 404; class=Http (34) +[WARNING] spurious network error (2 tries remaining): unexpected http status code: 404; class=Http (34) +[WARNING] spurious network error (1 tries remaining): unexpected http status code: 404; class=Http (34) +[ERROR] failed to get `bar` as a dependency of package `foo v0.0.0 ([ROOT]/foo)` + +Caused by: + failed to load source for dependency `bar` + +Caused by: + Unable to update https://github.com/foo/bar/pull/123 + +Caused by: + failed to clone into: [ROOT]/home/.cargo/git/db/123-[HASH] + +Caused by: + network failure seems to have happened + if a proxy or similar is necessary `net.git-fetch-with-cli` may help here + https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli Caused by: - dependency (bar) git url https://github.com/foo/bar/pull/123 is not a repository. The path looks like a pull request. Try replacing the dependency with: `git = "https://github.com/foo/bar.git" rev = "refs/pull/123/head"` in the dependency declaration. + unexpected http status code: 404; class=Http (34) "#]]) .run();