Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(publish): Allow dry-run of a non-bumped workspace #14847

Merged
merged 2 commits into from
Nov 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions src/cargo/sources/overlay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,24 +63,16 @@ impl<'gctx> Source for DependencyConfusionThreatOverlaySource<'gctx> {
};
ready!(self.local.query(&local_dep, kind, &mut local_callback))?;

let mut package_collision = None;
let mut remote_callback = |index: IndexSummary| {
if local_packages.contains(index.as_summary()) {
package_collision = Some(index.as_summary().clone());
tracing::debug!(?local_source, ?remote_source, ?index, "package collision");
} else {
f(index)
}
f(index)
};
ready!(self.remote.query(dep, kind, &mut remote_callback))?;

if let Some(collision) = package_collision {
std::task::Poll::Ready(Err(anyhow::anyhow!(
"found a package in the remote registry and the local overlay: {}@{}",
collision.name(),
collision.version()
)))
} else {
std::task::Poll::Ready(Ok(()))
}
std::task::Poll::Ready(Ok(()))
}

fn invalidate_cache(&mut self) {
Expand Down
17 changes: 9 additions & 8 deletions tests/testsuite/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6056,20 +6056,21 @@ fn workspace_with_local_dep_already_published_nightly() {
p.cargo("package -Zpackage-workspace")
.masquerade_as_nightly_cargo(&["package-workspace"])
.replace_crates_io(reg.index_url())
.with_status(101)
.with_stderr_data(
str![[r#"
[PACKAGING] dep v0.1.0 ([ROOT]/foo/dep)
[PACKAGING] main v0.0.1 ([ROOT]/foo/main)
[UPDATING] crates.io index
[ERROR] failed to prepare local package for uploading

Caused by:
failed to get `dep` as a dependency of package `main v0.0.1 ([ROOT]/foo/main)`

Caused by:
found a package in the remote registry and the local overlay: dep@0.1.0
[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
[VERIFYING] dep v0.1.0 ([ROOT]/foo/dep)
[COMPILING] dep v0.1.0 ([ROOT]/foo/target/package/dep-0.1.0)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[VERIFYING] main v0.0.1 ([ROOT]/foo/main)
[UNPACKING] dep v0.1.0 (registry `[ROOT]/foo/target/package/tmp-registry`)
[COMPILING] dep v0.1.0
[COMPILING] main v0.0.1 ([ROOT]/foo/target/package/main-0.0.1)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s

"#]]
.unordered(),
Expand Down
64 changes: 29 additions & 35 deletions tests/testsuite/registry_overlay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use cargo_test_support::prelude::*;
use cargo_test_support::project;
use cargo_test_support::registry::{Package, RegistryBuilder, TestRegistry};
use cargo_test_support::str;

fn setup() -> (TestRegistry, String) {
let alt = RegistryBuilder::new().alternative().build();
Expand Down Expand Up @@ -77,17 +78,16 @@ fn registry_version_wins() {

p.cargo("check")
.overlay_registry(&reg.index_url(), &alt_path)
.with_stderr_data(
"\
[UPDATING] [..]
.with_stderr_data(str![[r#"
[UPDATING] `sparse+http://127.0.0.1:[..]/index/` index
[LOCKING] 1 package to latest compatible version
[DOWNLOADING] crates ...
[DOWNLOADED] baz v0.1.1 (registry [..])
[DOWNLOADED] baz v0.1.1 (registry `sparse+http://127.0.0.1:[..]/index/`)
[CHECKING] baz v0.1.1
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
",
)

"#]])
.run();
}

Expand Down Expand Up @@ -120,21 +120,20 @@ fn overlay_version_wins() {

p.cargo("check")
.overlay_registry(&reg.index_url(), &alt_path)
.with_stderr_data(
"\
[UPDATING] [..]
.with_stderr_data(str![[r#"
[UPDATING] `sparse+http://127.0.0.1:[..]/index/` index
[LOCKING] 1 package to latest compatible version
[UNPACKING] baz v0.1.1 (registry [..])
[UNPACKING] baz v0.1.1 (registry `[ROOT]/alternative-registry`)
[CHECKING] baz v0.1.1
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
",
)

"#]])
.run();
}

#[cargo_test]
fn version_collision() {
fn version_precedence() {
let (reg, alt_path) = setup();
let p = project()
.file(
Expand Down Expand Up @@ -162,19 +161,15 @@ fn version_collision() {

p.cargo("check")
.overlay_registry(&reg.index_url(), &alt_path)
.with_status(101)
.with_stderr_data(
"\
[UPDATING] [..]
[ERROR] failed to get `baz` [..]

Caused by:
failed to query replaced source registry `crates-io`

Caused by:
found a package in the remote registry and the local overlay: baz@0.1.1
",
)
.with_stderr_data(str![[r#"
[UPDATING] `sparse+http://127.0.0.1:[..]/index/` index
[LOCKING] 1 package to latest compatible version
[UNPACKING] baz v0.1.1 (registry `[ROOT]/alternative-registry`)
[CHECKING] baz v0.1.1
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s

"#]])
.run();
}

Expand Down Expand Up @@ -248,22 +243,21 @@ fn registry_dep_depends_on_new_local_package() {

p.cargo("check")
.overlay_registry(&reg.index_url(), &alt_path)
.with_stderr_data(
"\
[UPDATING] [..]
.with_stderr_data(str![[r#"
[UPDATING] `sparse+http://127.0.0.1:[..]/index/` index
[LOCKING] 3 packages to latest compatible versions
[ADDING] workspace-package v0.0.1 (available: v0.1.1)
[DOWNLOADING] crates ...
[UNPACKING] [..]
[DOWNLOADED] [..]
[DOWNLOADED] [..]
[UNPACKING] workspace-package v0.1.1 (registry `[ROOT]/alternative-registry`)
[DOWNLOADED] registry-package v0.1.0 (registry `sparse+http://127.0.0.1:[..]/index/`)
[DOWNLOADED] workspace-package v0.0.1 (registry `sparse+http://127.0.0.1:[..]/index/`)
[CHECKING] workspace-package v0.1.1
[CHECKING] workspace-package v0.0.1
[CHECKING] registry-package v0.1.0
[CHECKING] foo v0.0.1 [..]
[CHECKING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
",
)

"#]])
.run();
}

Expand Down