diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index fe750adb9f7..bc35ea0c67f 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -417,6 +417,11 @@ fn local_deps(packages: impl Iterator) -> LocalDependenc continue; }; + // We don't care about cycles + if dep.source_id() == pkg.package_id().source_id() { + continue; + } + if let Some(dep_pkg) = source_to_pkg.get(&dep.source_id()) { graph.link(pkg.package_id(), *dep_pkg); } diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index e519fa18bcf..2ce6d322b4e 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -7560,6 +7560,39 @@ fn unpublished_cyclic_dev_dependencies() { ); } +#[cargo_test] +fn unpublished_cyclic_dev_dependencies_nightly() { + registry::init(); + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.0.1" + edition = "2015" + authors = [] + license = "MIT" + description = "foo" + documentation = "foo" + + [dev-dependencies] + foo = { path = ".", version = "0.0.1" } + "#, + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("package --no-verify --exclude-lockfile -Zpackage-workspace") + .masquerade_as_nightly_cargo(&["package-workspace"]) + .with_stderr_data(str![[r#" +[PACKAGING] foo v0.0.1 ([ROOT]/foo) +[PACKAGED] 3 files, [FILE_SIZE]B ([FILE_SIZE]B compressed) + +"#]]) + .run(); +} + // A failing case from #[cargo_test] fn unpublished_dependency() {