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

Fixes #14789
This commit is contained in:
Ed Page 2024-11-21 09:48:26 -06:00
parent ffe59de494
commit ad23d73fae
3 changed files with 19 additions and 29 deletions

View File

@ -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) {

View File

@ -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(),

View File

@ -133,7 +133,7 @@ fn overlay_version_wins() {
}
#[cargo_test]
fn version_collision() {
fn version_precedence() {
let (reg, alt_path) = setup();
let p = project()
.file(
@ -161,16 +161,13 @@ fn version_collision() {
p.cargo("check")
.overlay_registry(&reg.index_url(), &alt_path)
.with_status(101)
.with_stderr_data(str![[r#"
[UPDATING] `sparse+http://127.0.0.1:[..]/index/` index
[ERROR] failed to get `baz` as a dependency of package `foo v0.0.1 ([ROOT]/foo)`
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
[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();