diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index dd7e16bb644..472acf41cb1 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -268,23 +268,22 @@ fn do_package<'a>( let deps = local_deps(pkgs.iter().map(|(p, f)| ((*p).clone(), f.clone()))); let just_pkgs: Vec<_> = pkgs.iter().map(|p| p.0).collect(); - let mut local_reg = { - // The publish registry doesn't matter unless there are local dependencies that will be - // resolved, - // so only try to get one if we need it. If they explicitly passed a - // registry on the CLI, we check it no matter what. - let sid = if (deps.has_dependencies() && (opts.include_lockfile || opts.verify)) - || opts.reg_or_index.is_some() - { - let sid = get_registry(ws.gctx(), &just_pkgs, opts.reg_or_index.clone())?; - debug!("packaging for registry {}", sid); - Some(sid) - } else { - None - }; + // The publish registry doesn't matter unless there are local dependencies that will be + // resolved, + // so only try to get one if we need it. + // + // If they explicitly passed a registry on the CLI, we check it no matter what to verify + // `package.publish`. + let needs_local_reg = deps.has_dependencies() && (opts.include_lockfile || opts.verify); + let verify_registry_allow_list = opts.reg_or_index.is_some(); + let mut local_reg = if !opts.list && (needs_local_reg || verify_registry_allow_list) { + let sid = get_registry(ws.gctx(), &just_pkgs, opts.reg_or_index.clone())?; + debug!("packaging for registry {}", sid); let reg_dir = ws.build_dir().join("package").join("tmp-registry"); - sid.map(|sid| TmpRegistry::new(ws.gctx(), reg_dir, sid)) - .transpose()? + let local_reg = TmpRegistry::new(ws.gctx(), reg_dir, sid)?; + Some(local_reg) + } else { + None }; // Packages need to be created in dependency order, because dependencies must diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index 4c3312aabba..c847104e9be 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -6791,6 +6791,16 @@ fn registry_not_in_publish_list() { [ERROR] `foo` cannot be packaged. The registry `alternative` is not listed in the `package.publish` value in Cargo.toml. +"#]]) + .run(); + + p.cargo("package --registry alternative --list") + .with_stdout_data(str![[r#" +Cargo.lock +Cargo.toml +Cargo.toml.orig +src/main.rs + "#]]) .run(); }