From 52419298aa13aa73cd47b3058a43af0cdfeccd9c Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:13:45 -0600 Subject: [PATCH 1/7] test(package): Show existing alt reg --list behavior --- tests/testsuite/package.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index 4c3312aabba..dc919012074 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -6791,6 +6791,15 @@ 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_status(101) + .with_stderr_data(str![[r#" +[ERROR] `foo` cannot be packaged. +The registry `alternative` is not listed in the `package.publish` value in Cargo.toml. + "#]]) .run(); } From de27e6578c5ef1cc609535b1a84401df628d4d75 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:17:25 -0600 Subject: [PATCH 2/7] refactor(package): Combine some steps --- src/cargo/ops/cargo_package/mod.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index dd7e16bb644..501039969e0 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -273,18 +273,17 @@ fn do_package<'a>( // 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)) + 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) + let reg_dir = ws.build_dir().join("package").join("tmp-registry"); + let local_reg = TmpRegistry::new(ws.gctx(), reg_dir, sid)?; + Some(local_reg) } else { None - }; - let reg_dir = ws.build_dir().join("package").join("tmp-registry"); - sid.map(|sid| TmpRegistry::new(ws.gctx(), reg_dir, sid)) - .transpose()? + } }; // Packages need to be created in dependency order, because dependencies must From 2bdc1ac49e4da7f1906f990d3d46349031822002 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:17:43 -0600 Subject: [PATCH 3/7] refactor(package): Remove nesting --- src/cargo/ops/cargo_package/mod.rs | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index 501039969e0..e6ccd0b7167 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -268,22 +268,20 @@ 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. - 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); - let reg_dir = ws.build_dir().join("package").join("tmp-registry"); - let local_reg = TmpRegistry::new(ws.gctx(), reg_dir, sid)?; - Some(local_reg) - } 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. + let mut local_reg = 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); + let reg_dir = ws.build_dir().join("package").join("tmp-registry"); + 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 From c0508cfb315f86cc8497d401dafc4755a79c5754 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:18:20 -0600 Subject: [PATCH 4/7] docs(package): Make exception stand out --- src/cargo/ops/cargo_package/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index e6ccd0b7167..6e268417df3 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -270,8 +270,9 @@ fn do_package<'a>( // 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. + // 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 mut local_reg = if (deps.has_dependencies() && (opts.include_lockfile || opts.verify)) || opts.reg_or_index.is_some() { From de9398f5f8d04df3a86c53f18e2e3944a2195721 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:18:49 -0600 Subject: [PATCH 5/7] docs(package): Provide motivation --- src/cargo/ops/cargo_package/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index 6e268417df3..877e4969777 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -272,7 +272,8 @@ fn do_package<'a>( // 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. + // If they explicitly passed a registry on the CLI, we check it no matter what to verify + // `package.publish`. let mut local_reg = if (deps.has_dependencies() && (opts.include_lockfile || opts.verify)) || opts.reg_or_index.is_some() { From 6aadacf0f46596fd4dd9d9b314bfb96eacd19e68 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:31:02 -0600 Subject: [PATCH 6/7] refactor(package): Name the conditions for local_reg --- src/cargo/ops/cargo_package/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index 877e4969777..2b80290e27e 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -274,9 +274,9 @@ fn do_package<'a>( // // If they explicitly passed a registry on the CLI, we check it no matter what to verify // `package.publish`. - let mut local_reg = if (deps.has_dependencies() && (opts.include_lockfile || opts.verify)) - || opts.reg_or_index.is_some() - { + 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 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"); From 5e2cf5d376c737f9e7d85dc195f3857c1b545bd2 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 4 Dec 2025 09:27:24 -0600 Subject: [PATCH 7/7] fix(package): Don't verify registry for --list Since `--list` is doing nothing with registries, imo, it shouldn't error if `CARGO_REGISTRY_DEFAULT` is not in `package.publish`. This also affects `--registry` and `--index` but that should be fine. Fixes crate-ci/cargo-release#921 --- src/cargo/ops/cargo_package/mod.rs | 2 +- tests/testsuite/package.rs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/cargo/ops/cargo_package/mod.rs b/src/cargo/ops/cargo_package/mod.rs index 2b80290e27e..472acf41cb1 100644 --- a/src/cargo/ops/cargo_package/mod.rs +++ b/src/cargo/ops/cargo_package/mod.rs @@ -276,7 +276,7 @@ fn do_package<'a>( // `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 needs_local_reg || verify_registry_allow_list { + 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"); diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index dc919012074..c847104e9be 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -6795,10 +6795,11 @@ The registry `alternative` is not listed in the `package.publish` value in Cargo .run(); p.cargo("package --registry alternative --list") - .with_status(101) - .with_stderr_data(str![[r#" -[ERROR] `foo` cannot be packaged. -The registry `alternative` is not listed in the `package.publish` value in Cargo.toml. + .with_stdout_data(str![[r#" +Cargo.lock +Cargo.toml +Cargo.toml.orig +src/main.rs "#]]) .run();