Skip to content

Commit

Permalink
fix(toml): Warn, rather than fail publish, if a target is excluded
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Apr 5, 2024
1 parent ec9e601 commit 4217b7b
Show file tree
Hide file tree
Showing 9 changed files with 359 additions and 66 deletions.
88 changes: 78 additions & 10 deletions src/cargo/util/toml/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ fn resolve_toml(
manifest_file: &Path,
gctx: &GlobalContext,
warnings: &mut Vec<String>,
_errors: &mut Vec<String>,
errors: &mut Vec<String>,
) -> CargoResult<manifest::TomlManifest> {
let mut resolved_toml = manifest::TomlManifest {
cargo_features: original_toml.cargo_features.clone(),
Expand Down Expand Up @@ -324,6 +324,39 @@ fn resolve_toml(
edition,
warnings,
)?;
resolved_toml.bin = targets::resolve_bins(
original_toml.bin.as_ref(),
package_root,
&original_package.name,
edition,
original_package.autobins,
warnings,
resolved_toml.lib.is_some(),
)?;
resolved_toml.example = targets::resolve_examples(
original_toml.example.as_ref(),
package_root,
edition,
original_package.autoexamples,
warnings,
errors,
)?;
resolved_toml.test = targets::resolve_tests(
original_toml.test.as_ref(),
package_root,
edition,
original_package.autotests,
warnings,
errors,
)?;
resolved_toml.bench = targets::resolve_benches(
original_toml.bench.as_ref(),
package_root,
edition,
original_package.autobenches,
warnings,
errors,
)?;

resolved_toml.dependencies = resolve_dependencies(
gctx,
Expand Down Expand Up @@ -476,10 +509,10 @@ fn resolve_package_toml<'a>(
.map(manifest::InheritableField::Value),
workspace: original_package.workspace.clone(),
im_a_teapot: original_package.im_a_teapot.clone(),
autobins: original_package.autobins.clone(),
autoexamples: original_package.autoexamples.clone(),
autotests: original_package.autotests.clone(),
autobenches: original_package.autobenches.clone(),
autobins: Some(false),
autoexamples: Some(false),
autotests: Some(false),
autobenches: Some(false),
default_run: original_package.default_run.clone(),
description: original_package
.description
Expand Down Expand Up @@ -1118,7 +1151,6 @@ fn to_real_manifest(
&features,
&original_toml,
&resolved_toml,
package_name,
package_root,
edition,
&resolved_package.metabuild,
Expand Down Expand Up @@ -2471,17 +2503,53 @@ fn prepare_toml_for_publish(
.as_ref()
.filter(|lib| is_target_included(lib, included, "library", gctx))
.cloned();
let bin = me.bin.as_ref().and_then(|targets| {
targets::non_empty(
targets
.iter()
.filter(|target| is_target_included(target, included, "binary", gctx))
.cloned()
.collect::<Vec<_>>(),
)
});
let example = me.example.as_ref().and_then(|targets| {
targets::non_empty(
targets
.iter()
.filter(|target| is_target_included(target, included, "example", gctx))
.cloned()
.collect::<Vec<_>>(),
)
});
let test = me.test.as_ref().and_then(|targets| {
targets::non_empty(
targets
.iter()
.filter(|target| is_target_included(target, included, "test", gctx))
.cloned()
.collect::<Vec<_>>(),
)
});
let bench = me.bench.as_ref().and_then(|targets| {
targets::non_empty(
targets
.iter()
.filter(|target| is_target_included(target, included, "benchmark", gctx))
.cloned()
.collect::<Vec<_>>(),
)
});

let all = |_d: &manifest::TomlDependency| true;
let mut manifest = manifest::TomlManifest {
package: Some(package),
project: None,
profile: me.profile.clone(),
lib,
bin: me.bin.clone(),
example: me.example.clone(),
test: me.test.clone(),
bench: me.bench.clone(),
bin,
example,
test,
bench,
dependencies: map_deps(gctx, me.dependencies.as_ref(), all)?,
dev_dependencies: map_deps(
gctx,
Expand Down
57 changes: 9 additions & 48 deletions src/cargo/util/toml/targets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ pub(super) fn to_targets(
features: &Features,
original_toml: &TomlManifest,
resolved_toml: &TomlManifest,
package_name: &str,
package_root: &Path,
edition: Edition,
metabuild: &Option<StringOrVec>,
Expand All @@ -45,8 +44,6 @@ pub(super) fn to_targets(
) -> CargoResult<Vec<Target>> {
let mut targets = Vec::new();

let has_lib;

if let Some(target) = to_lib_target(
original_toml.lib.as_ref(),
resolved_toml.lib.as_ref(),
Expand All @@ -55,72 +52,36 @@ pub(super) fn to_targets(
warnings,
)? {
targets.push(target);
has_lib = true;
} else {
has_lib = false;
}

let package = resolved_toml
.package
.as_ref()
.ok_or_else(|| anyhow::format_err!("manifest has no `package` (or `project`)"))?;

let bins = resolve_bins(
resolved_toml.bin.as_ref(),
package_root,
package_name,
edition,
package.autobins,
warnings,
has_lib,
)?;
targets.extend(to_bin_targets(
features,
bins.as_deref().unwrap_or_default(),
resolved_toml.bin.as_deref().unwrap_or_default(),
package_root,
edition,
errors,
)?);

let toml_examples = resolve_examples(
resolved_toml.example.as_ref(),
package_root,
edition,
package.autoexamples,
warnings,
errors,
)?;
targets.extend(to_example_targets(
toml_examples.as_deref().unwrap_or_default(),
resolved_toml.example.as_deref().unwrap_or_default(),
package_root,
edition,
warnings,
)?);

let toml_tests = resolve_tests(
resolved_toml.test.as_ref(),
package_root,
edition,
package.autotests,
warnings,
errors,
)?;
targets.extend(to_test_targets(
toml_tests.as_deref().unwrap_or_default(),
resolved_toml.test.as_deref().unwrap_or_default(),
package_root,
edition,
)?);

let toml_benches = resolve_benches(
resolved_toml.bench.as_ref(),
package_root,
edition,
package.autobenches,
warnings,
errors,
)?;
targets.extend(to_bench_targets(
toml_benches.as_deref().unwrap_or_default(),
resolved_toml.bench.as_deref().unwrap_or_default(),
package_root,
edition,
)?);
Expand Down Expand Up @@ -288,7 +249,7 @@ fn to_lib_target(
Ok(Some(target))
}

fn resolve_bins(
pub fn resolve_bins(
toml_bins: Option<&Vec<TomlBinTarget>>,
package_root: &Path,
package_name: &str,
Expand Down Expand Up @@ -414,7 +375,7 @@ fn legacy_bin_path(package_root: &Path, name: &str, has_lib: bool) -> Option<Pat
None
}

fn resolve_examples(
pub fn resolve_examples(
toml_examples: Option<&Vec<TomlExampleTarget>>,
package_root: &Path,
edition: Edition,
Expand Down Expand Up @@ -471,7 +432,7 @@ fn to_example_targets(
Ok(result)
}

fn resolve_tests(
pub fn resolve_tests(
toml_tests: Option<&Vec<TomlTestTarget>>,
package_root: &Path,
edition: Edition,
Expand Down Expand Up @@ -519,7 +480,7 @@ fn to_test_targets(
Ok(result)
}

fn resolve_benches(
pub fn resolve_benches(
toml_benches: Option<&Vec<TomlBenchTarget>>,
package_root: &Path,
edition: Edition,
Expand Down Expand Up @@ -585,7 +546,7 @@ fn to_bench_targets(
Ok(result)
}

fn non_empty<T>(targets: Vec<T>) -> Option<Vec<T>> {
pub fn non_empty<T>(targets: Vec<T>) -> Option<Vec<T>> {
if targets.is_empty() {
None
} else {
Expand Down
4 changes: 4 additions & 0 deletions tests/testsuite/artifact_dep.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2165,6 +2165,10 @@ name = "foo"
version = "0.1.0"
authors = []
build = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "foo"
homepage = "foo"
documentation = "foo"
Expand Down
4 changes: 4 additions & 0 deletions tests/testsuite/features2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1704,6 +1704,10 @@ name = "a"
version = "0.1.0"
authors = ["Zzz"]
build = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "foo"
homepage = "https://example.com/"
readme = false
Expand Down
8 changes: 8 additions & 0 deletions tests/testsuite/features_namespaced.rs
Original file line number Diff line number Diff line change
Expand Up @@ -986,6 +986,10 @@ edition = "2015"
name = "foo"
version = "0.1.0"
build = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "foo"
homepage = "https://example.com/"
readme = false
Expand Down Expand Up @@ -1110,6 +1114,10 @@ edition = "2015"
name = "foo"
version = "0.1.0"
build = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "foo"
homepage = "https://example.com/"
readme = false
Expand Down
Loading

0 comments on commit 4217b7b

Please sign in to comment.