Skip to content

Commit 3582b78

Browse files
committed
refactor(embedded): Move package to normalization
1 parent 8a40b36 commit 3582b78

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

src/cargo/util/toml/embedded.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,17 @@ fn expand_manifest_(manifest: &str, path: &std::path::Path) -> CargoResult<toml:
8787
// Prevent looking for a workspace by `read_manifest_from_str`
8888
manifest.insert("workspace".to_owned(), toml::Table::new().into());
8989

90-
let package = manifest
91-
.entry("package".to_owned())
92-
.or_insert_with(|| toml::Table::new().into())
93-
.as_table_mut()
94-
.ok_or_else(|| anyhow::format_err!("`package` must be a table"))?;
95-
for key in ["workspace", "build", "links"]
96-
.iter()
97-
.chain(AUTO_FIELDS.iter())
98-
{
99-
if package.contains_key(*key) {
100-
anyhow::bail!("`package.{key}` is not allowed in embedded manifests")
90+
if let Some(package) = manifest.get("package").and_then(|v| v.as_table()) {
91+
for key in ["workspace", "build", "links"]
92+
.iter()
93+
.chain(AUTO_FIELDS.iter())
94+
{
95+
if package.contains_key(*key) {
96+
anyhow::bail!("`package.{key}` is not allowed in embedded manifests")
97+
}
10198
}
10299
}
100+
103101
// HACK: Using an absolute path while `hacked_path` is in use
104102
let bin_path = path.to_string_lossy().into_owned();
105103
let file_stem = path
@@ -541,8 +539,6 @@ fn main() {}
541539
name = "test-"
542540
path = "/home/me/test.rs"
543541
544-
[package]
545-
546542
[workspace]
547543
548544
"#]]
@@ -568,8 +564,6 @@ path = [..]
568564
[dependencies]
569565
time = "0.1.25"
570566
571-
[package]
572-
573567
[workspace]
574568
575569
"#]]

src/cargo/util/toml/mod.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use annotate_snippets::{Level, Snippet};
2+
use std::borrow::Cow;
23
use std::collections::{BTreeMap, BTreeSet, HashMap};
34
use std::ffi::OsStr;
45
use std::path::{Path, PathBuf};
@@ -319,9 +320,20 @@ fn normalize_toml(
319320
_unused_keys: Default::default(),
320321
};
321322

322-
if let Some(original_package) = original_toml.package() {
323-
let normalized_package =
324-
normalize_package_toml(original_package, manifest_file, is_embedded, gctx, &inherit)?;
323+
if let Some(original_package) = original_toml.package().map(Cow::Borrowed).or_else(|| {
324+
if is_embedded {
325+
Some(Cow::Owned(Box::new(manifest::TomlPackage::default())))
326+
} else {
327+
None
328+
}
329+
}) {
330+
let normalized_package = normalize_package_toml(
331+
&original_package,
332+
manifest_file,
333+
is_embedded,
334+
gctx,
335+
&inherit,
336+
)?;
325337
let package_name = &normalized_package
326338
.normalized_name()
327339
.expect("previously normalized")

0 commit comments

Comments
 (0)