Skip to content

Commit 8a6fa8b

Browse files
committed
refactor(toml): Extract package resolving
1 parent e9d28d8 commit 8a6fa8b

File tree

1 file changed

+135
-129
lines changed

1 file changed

+135
-129
lines changed

src/cargo/util/toml/mod.rs

Lines changed: 135 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -532,135 +532,8 @@ fn resolve_toml(
532532
};
533533

534534
let resolved_package = if let Some(original_package) = original_toml.package() {
535-
let resolved_package = manifest::TomlPackage {
536-
edition: original_package
537-
.edition
538-
.clone()
539-
.map(|value| field_inherit_with(value, "edition", || inherit()?.edition()))
540-
.transpose()?
541-
.map(manifest::InheritableField::Value),
542-
rust_version: original_package
543-
.rust_version
544-
.clone()
545-
.map(|value| {
546-
field_inherit_with(value, "rust-version", || inherit()?.rust_version())
547-
})
548-
.transpose()?
549-
.map(manifest::InheritableField::Value),
550-
name: original_package.name.clone(),
551-
version: original_package
552-
.version
553-
.clone()
554-
.map(|value| field_inherit_with(value, "version", || inherit()?.version()))
555-
.transpose()?
556-
.map(manifest::InheritableField::Value),
557-
authors: original_package
558-
.authors
559-
.clone()
560-
.map(|value| field_inherit_with(value, "authors", || inherit()?.authors()))
561-
.transpose()?
562-
.map(manifest::InheritableField::Value),
563-
build: original_package.build.clone(),
564-
metabuild: original_package.metabuild.clone(),
565-
default_target: original_package.default_target.clone(),
566-
forced_target: original_package.forced_target.clone(),
567-
links: original_package.links.clone(),
568-
exclude: original_package
569-
.exclude
570-
.clone()
571-
.map(|value| field_inherit_with(value, "exclude", || inherit()?.exclude()))
572-
.transpose()?
573-
.map(manifest::InheritableField::Value),
574-
include: original_package
575-
.include
576-
.clone()
577-
.map(|value| field_inherit_with(value, "include", || inherit()?.include()))
578-
.transpose()?
579-
.map(manifest::InheritableField::Value),
580-
publish: original_package
581-
.publish
582-
.clone()
583-
.map(|value| field_inherit_with(value, "publish", || inherit()?.publish()))
584-
.transpose()?
585-
.map(manifest::InheritableField::Value),
586-
workspace: original_package.workspace.clone(),
587-
im_a_teapot: original_package.im_a_teapot.clone(),
588-
autobins: original_package.autobins.clone(),
589-
autoexamples: original_package.autoexamples.clone(),
590-
autotests: original_package.autotests.clone(),
591-
autobenches: original_package.autobenches.clone(),
592-
default_run: original_package.default_run.clone(),
593-
description: original_package
594-
.description
595-
.clone()
596-
.map(|value| field_inherit_with(value, "description", || inherit()?.description()))
597-
.transpose()?
598-
.map(manifest::InheritableField::Value),
599-
homepage: original_package
600-
.homepage
601-
.clone()
602-
.map(|value| field_inherit_with(value, "homepage", || inherit()?.homepage()))
603-
.transpose()?
604-
.map(manifest::InheritableField::Value),
605-
documentation: original_package
606-
.documentation
607-
.clone()
608-
.map(|value| {
609-
field_inherit_with(value, "documentation", || inherit()?.documentation())
610-
})
611-
.transpose()?
612-
.map(manifest::InheritableField::Value),
613-
readme: readme_for_package(
614-
package_root,
615-
original_package
616-
.readme
617-
.clone()
618-
.map(|value| {
619-
field_inherit_with(value, "readme", || inherit()?.readme(package_root))
620-
})
621-
.transpose()?
622-
.as_ref(),
623-
)
624-
.map(|s| manifest::InheritableField::Value(StringOrBool::String(s))),
625-
keywords: original_package
626-
.keywords
627-
.clone()
628-
.map(|value| field_inherit_with(value, "keywords", || inherit()?.keywords()))
629-
.transpose()?
630-
.map(manifest::InheritableField::Value),
631-
categories: original_package
632-
.categories
633-
.clone()
634-
.map(|value| field_inherit_with(value, "categories", || inherit()?.categories()))
635-
.transpose()?
636-
.map(manifest::InheritableField::Value),
637-
license: original_package
638-
.license
639-
.clone()
640-
.map(|value| field_inherit_with(value, "license", || inherit()?.license()))
641-
.transpose()?
642-
.map(manifest::InheritableField::Value),
643-
license_file: original_package
644-
.license_file
645-
.clone()
646-
.map(|value| {
647-
field_inherit_with(value, "license-file", || {
648-
inherit()?.license_file(package_root)
649-
})
650-
})
651-
.transpose()?
652-
.map(manifest::InheritableField::Value),
653-
repository: original_package
654-
.repository
655-
.clone()
656-
.map(|value| field_inherit_with(value, "repository", || inherit()?.repository()))
657-
.transpose()?
658-
.map(manifest::InheritableField::Value),
659-
resolver: original_package.resolver.clone(),
660-
metadata: original_package.metadata.clone(),
661-
_invalid_cargo_features: Default::default(),
662-
};
663-
Some(Box::new(resolved_package))
535+
let resolved_package = resolve_package_toml(original_package, package_root, &inherit)?;
536+
Some(resolved_package)
664537
} else {
665538
None
666539
};
@@ -773,6 +646,139 @@ fn resolve_toml(
773646
Ok(resolved_toml)
774647
}
775648

649+
#[tracing::instrument(skip_all)]
650+
fn resolve_package_toml<'a>(
651+
original_package: &manifest::TomlPackage,
652+
package_root: &Path,
653+
inherit: &dyn Fn() -> CargoResult<&'a InheritableFields>,
654+
) -> CargoResult<Box<manifest::TomlPackage>> {
655+
let resolved_package = manifest::TomlPackage {
656+
edition: original_package
657+
.edition
658+
.clone()
659+
.map(|value| field_inherit_with(value, "edition", || inherit()?.edition()))
660+
.transpose()?
661+
.map(manifest::InheritableField::Value),
662+
rust_version: original_package
663+
.rust_version
664+
.clone()
665+
.map(|value| field_inherit_with(value, "rust-version", || inherit()?.rust_version()))
666+
.transpose()?
667+
.map(manifest::InheritableField::Value),
668+
name: original_package.name.clone(),
669+
version: original_package
670+
.version
671+
.clone()
672+
.map(|value| field_inherit_with(value, "version", || inherit()?.version()))
673+
.transpose()?
674+
.map(manifest::InheritableField::Value),
675+
authors: original_package
676+
.authors
677+
.clone()
678+
.map(|value| field_inherit_with(value, "authors", || inherit()?.authors()))
679+
.transpose()?
680+
.map(manifest::InheritableField::Value),
681+
build: original_package.build.clone(),
682+
metabuild: original_package.metabuild.clone(),
683+
default_target: original_package.default_target.clone(),
684+
forced_target: original_package.forced_target.clone(),
685+
links: original_package.links.clone(),
686+
exclude: original_package
687+
.exclude
688+
.clone()
689+
.map(|value| field_inherit_with(value, "exclude", || inherit()?.exclude()))
690+
.transpose()?
691+
.map(manifest::InheritableField::Value),
692+
include: original_package
693+
.include
694+
.clone()
695+
.map(|value| field_inherit_with(value, "include", || inherit()?.include()))
696+
.transpose()?
697+
.map(manifest::InheritableField::Value),
698+
publish: original_package
699+
.publish
700+
.clone()
701+
.map(|value| field_inherit_with(value, "publish", || inherit()?.publish()))
702+
.transpose()?
703+
.map(manifest::InheritableField::Value),
704+
workspace: original_package.workspace.clone(),
705+
im_a_teapot: original_package.im_a_teapot.clone(),
706+
autobins: original_package.autobins.clone(),
707+
autoexamples: original_package.autoexamples.clone(),
708+
autotests: original_package.autotests.clone(),
709+
autobenches: original_package.autobenches.clone(),
710+
default_run: original_package.default_run.clone(),
711+
description: original_package
712+
.description
713+
.clone()
714+
.map(|value| field_inherit_with(value, "description", || inherit()?.description()))
715+
.transpose()?
716+
.map(manifest::InheritableField::Value),
717+
homepage: original_package
718+
.homepage
719+
.clone()
720+
.map(|value| field_inherit_with(value, "homepage", || inherit()?.homepage()))
721+
.transpose()?
722+
.map(manifest::InheritableField::Value),
723+
documentation: original_package
724+
.documentation
725+
.clone()
726+
.map(|value| field_inherit_with(value, "documentation", || inherit()?.documentation()))
727+
.transpose()?
728+
.map(manifest::InheritableField::Value),
729+
readme: readme_for_package(
730+
package_root,
731+
original_package
732+
.readme
733+
.clone()
734+
.map(|value| {
735+
field_inherit_with(value, "readme", || inherit()?.readme(package_root))
736+
})
737+
.transpose()?
738+
.as_ref(),
739+
)
740+
.map(|s| manifest::InheritableField::Value(StringOrBool::String(s))),
741+
keywords: original_package
742+
.keywords
743+
.clone()
744+
.map(|value| field_inherit_with(value, "keywords", || inherit()?.keywords()))
745+
.transpose()?
746+
.map(manifest::InheritableField::Value),
747+
categories: original_package
748+
.categories
749+
.clone()
750+
.map(|value| field_inherit_with(value, "categories", || inherit()?.categories()))
751+
.transpose()?
752+
.map(manifest::InheritableField::Value),
753+
license: original_package
754+
.license
755+
.clone()
756+
.map(|value| field_inherit_with(value, "license", || inherit()?.license()))
757+
.transpose()?
758+
.map(manifest::InheritableField::Value),
759+
license_file: original_package
760+
.license_file
761+
.clone()
762+
.map(|value| {
763+
field_inherit_with(value, "license-file", || {
764+
inherit()?.license_file(package_root)
765+
})
766+
})
767+
.transpose()?
768+
.map(manifest::InheritableField::Value),
769+
repository: original_package
770+
.repository
771+
.clone()
772+
.map(|value| field_inherit_with(value, "repository", || inherit()?.repository()))
773+
.transpose()?
774+
.map(manifest::InheritableField::Value),
775+
resolver: original_package.resolver.clone(),
776+
metadata: original_package.metadata.clone(),
777+
_invalid_cargo_features: Default::default(),
778+
};
779+
Ok(Box::new(resolved_package))
780+
}
781+
776782
#[tracing::instrument(skip_all)]
777783
pub fn to_real_manifest(
778784
contents: String,

0 commit comments

Comments
 (0)