Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/spk-build/src/build/binary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@ where
let manifests = split_manifest_by_component(
input.package.ident(),
&collected_layer,
input.package.components(),
&input.package.components(),
)?;
let mut components = HashMap::new();
for (component, manifest) in manifests {
Expand Down
4 changes: 2 additions & 2 deletions crates/spk-build/src/validation/inherit_requirements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ impl super::Validator for InheritRequirementsValidator<'_> {
for component in all_components {
let downstream_build = solved_request
.spec
.downstream_build_requirements([component]);
.downstream_build_requirements([&component]);
for request in downstream_build.iter() {
let compat = build_requirements.contains_request(request);
let status = match (self.kind, compat) {
Expand Down Expand Up @@ -86,7 +86,7 @@ impl super::Validator for InheritRequirementsValidator<'_> {
}
let downstream_runtime = solved_request
.spec
.downstream_runtime_requirements([component]);
.downstream_runtime_requirements([&component]);
for request in downstream_runtime.iter() {
let status = match (self.kind, runtime_requirements.contains_request(request)) {
(RuleKind::Allow, Compatibility::Compatible)
Expand Down
9 changes: 5 additions & 4 deletions crates/spk-schema/crates/foundation/src/spec_ops/versioned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
// https://github.com/spkenv/spk

use std::borrow::Cow;
use std::sync::Arc;

use crate::version::{Compat, Compatibility, Version};
Expand All @@ -25,7 +26,7 @@ pub trait WithVersion {
#[enum_dispatch::enum_dispatch]
pub trait Versioned: HasVersion {
/// The compatibility guaranteed by this items versioning scheme
fn compat(&self) -> &Compat;
fn compat(&self) -> Cow<'_, Compat>;

/// Check if this item's version is api-compatible with the provided one
fn is_api_compatible(&self, base: &Version) -> Compatibility {
Expand All @@ -47,7 +48,7 @@ impl<T: HasVersion> HasVersion for Arc<T> {
}

impl<T: Versioned> Versioned for Arc<T> {
fn compat(&self) -> &Compat {
fn compat(&self) -> Cow<'_, Compat> {
(**self).compat()
}

Expand All @@ -67,7 +68,7 @@ impl<T: HasVersion> HasVersion for Box<T> {
}

impl<T: Versioned> Versioned for Box<T> {
fn compat(&self) -> &Compat {
fn compat(&self) -> Cow<'_, Compat> {
(**self).compat()
}

Expand All @@ -87,7 +88,7 @@ impl<T: HasVersion> HasVersion for &T {
}

impl<T: Versioned> Versioned for &T {
fn compat(&self) -> &Compat {
fn compat(&self) -> Cow<'_, Compat> {
(**self).compat()
}

Expand Down
3 changes: 2 additions & 1 deletion crates/spk-schema/src/install_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ where
}
}

let new_components = target_embedded_package.components().names();
let new_component_specs = target_embedded_package.components();
let new_components = new_component_specs.names();
if new_components.is_empty() {
// Empty components set? The embedded package is not allowed
// to have an empty component set.
Expand Down
16 changes: 8 additions & 8 deletions crates/spk-schema/src/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,16 @@ forward_to_impl!(BuildOptions, {

/// Access to the components defined by a package.
pub trait Components {
type ComponentSpecT;
type ComponentSpecT: Clone;

/// The components defined by this package
fn components(&self) -> &super::ComponentSpecList<Self::ComponentSpecT>;
fn components(&self) -> Cow<'_, super::ComponentSpecList<Self::ComponentSpecT>>;
}

forward_to_impl!(Components, {
type ComponentSpecT = T::ComponentSpecT;

fn components(&self) -> &super::ComponentSpecList<Self::ComponentSpecT> {
fn components(&self) -> Cow<'_, super::ComponentSpecList<Self::ComponentSpecT>> {
(**self).components()
}
});
Expand Down Expand Up @@ -154,7 +154,7 @@ pub trait Package:
+ Send
{
type Package;
type EmbeddedPackage;
type EmbeddedPackage: Clone;

/// The full identifier for this package
///
Expand All @@ -172,7 +172,7 @@ pub trait Package:
fn sources(&self) -> &Vec<super::SourceSpec>;

/// The packages that are embedded within this one
fn embedded(&self) -> &super::EmbeddedPackagesList<Self::EmbeddedPackage>;
fn embedded(&self) -> Cow<'_, super::EmbeddedPackagesList<Self::EmbeddedPackage>>;

/// The packages that are embedded within this one.
///
Expand All @@ -185,7 +185,7 @@ pub trait Package:
) -> std::result::Result<Vec<(Self::Package, Option<Component>)>, &str>;

/// The list of build options for this package
fn get_build_options(&self) -> &Vec<Opt>;
fn get_build_options(&self) -> Cow<'_, [Opt]>;

/// Identify the requirements for a build of this package.
fn get_build_requirements(&self) -> crate::Result<Cow<'_, RequirementsList<PinnedRequest>>>;
Expand Down Expand Up @@ -266,7 +266,7 @@ forward_to_impl!(Package, {
(**self).sources()
}

fn embedded(&self) -> &super::EmbeddedPackagesList<Self::EmbeddedPackage> {
fn embedded(&self) -> Cow<'_, super::EmbeddedPackagesList<Self::EmbeddedPackage>> {
(**self).embedded()
}

Expand All @@ -276,7 +276,7 @@ forward_to_impl!(Package, {
(**self).embedded_as_packages()
}

fn get_build_options(&self) -> &Vec<Opt> {
fn get_build_options(&self) -> Cow<'_, [Opt]> {
(**self).get_build_options()
}

Expand Down
10 changes: 5 additions & 5 deletions crates/spk-schema/src/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ impl RuntimeEnvironment for SpecRecipe {
}

impl Versioned for SpecRecipe {
fn compat(&self) -> &Compat {
fn compat(&self) -> Cow<'_, Compat> {
each_variant!(self, spec, spec.compat())
}
}
Expand Down Expand Up @@ -638,7 +638,7 @@ pub enum Spec {
impl Components for Spec {
type ComponentSpecT = ComponentSpec;

fn components(&self) -> &super::ComponentSpecList<Self::ComponentSpecT> {
fn components(&self) -> Cow<'_, super::ComponentSpecList<Self::ComponentSpecT>> {
match self {
Spec::V0Package(spec) => spec.components(),
}
Expand Down Expand Up @@ -702,7 +702,7 @@ impl RuntimeEnvironment for Spec {
}

impl Versioned for Spec {
fn compat(&self) -> &Compat {
fn compat(&self) -> Cow<'_, Compat> {
match self {
Spec::V0Package(spec) => spec.compat(),
}
Expand Down Expand Up @@ -738,7 +738,7 @@ impl Package for Spec {
}
}

fn embedded(&self) -> &super::EmbeddedPackagesList<Self::EmbeddedPackage> {
fn embedded(&self) -> Cow<'_, super::EmbeddedPackagesList<Self::EmbeddedPackage>> {
match self {
Spec::V0Package(spec) => spec.embedded(),
}
Expand All @@ -754,7 +754,7 @@ impl Package for Spec {
}
}

fn get_build_options(&self) -> &Vec<Opt> {
fn get_build_options(&self) -> Cow<'_, [Opt]> {
match self {
Spec::V0Package(spec) => spec.get_build_options(),
}
Expand Down
8 changes: 4 additions & 4 deletions crates/spk-schema/src/v0/embedded_package_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,8 +243,8 @@ impl BuildOptions for EmbeddedPackageSpec {
impl Components for EmbeddedPackageSpec {
type ComponentSpecT = ComponentSpec;

fn components(&self) -> &ComponentSpecList<Self::ComponentSpecT> {
&self.install.components
fn components(&self) -> Cow<'_, ComponentSpecList<Self::ComponentSpecT>> {
Cow::Borrowed(&self.install.components)
}
}

Expand Down Expand Up @@ -313,8 +313,8 @@ impl OptionValues for EmbeddedPackageSpec {
}

impl Versioned for EmbeddedPackageSpec {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
5 changes: 3 additions & 2 deletions crates/spk-schema/src/v0/embedded_recipe_install_spec_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
// https://github.com/spkenv/spk

use std::borrow::Cow;
use std::collections::HashMap;

use rstest::rstest;
Expand Down Expand Up @@ -72,8 +73,8 @@ fn test_render_all_pins_renders_requirements_in_components() {
}

impl Versioned for FakeBuild {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
10 changes: 6 additions & 4 deletions crates/spk-schema/src/v0/embedded_recipe_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
// https://github.com/spkenv/spk

use std::borrow::Cow;

use serde::{Deserialize, Serialize};
use spk_schema_foundation::IsDefault;
use spk_schema_foundation::ident::{AnyIdent, AsVersionIdent, VersionIdent};
Expand Down Expand Up @@ -102,8 +104,8 @@ impl AsVersionIdent for EmbeddedRecipeSpec {
impl Components for EmbeddedRecipeSpec {
type ComponentSpecT = RecipeComponentSpec;

fn components(&self) -> &ComponentSpecList<Self::ComponentSpecT> {
&self.install.components
fn components(&self) -> Cow<'_, ComponentSpecList<Self::ComponentSpecT>> {
Cow::Borrowed(&self.install.components)
}
}

Expand Down Expand Up @@ -138,8 +140,8 @@ impl Named for EmbeddedRecipeSpec {
}

impl Versioned for EmbeddedRecipeSpec {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
18 changes: 9 additions & 9 deletions crates/spk-schema/src/v0/package_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ impl BuildOptions for PackageSpec {
impl Components for PackageSpec {
type ComponentSpecT = ComponentSpec;

fn components(&self) -> &ComponentSpecList<Self::ComponentSpecT> {
&self.install.components
fn components(&self) -> Cow<'_, ComponentSpecList<Self::ComponentSpecT>> {
Cow::Borrowed(&self.install.components)
}
}

Expand Down Expand Up @@ -350,8 +350,8 @@ impl RuntimeEnvironment for PackageSpec {
}

impl Versioned for PackageSpec {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down Expand Up @@ -407,8 +407,8 @@ impl Package for PackageSpec {
&self.sources
}

fn embedded(&self) -> &EmbeddedPackagesList<Self::EmbeddedPackage> {
&self.install.embedded
fn embedded(&self) -> Cow<'_, EmbeddedPackagesList<Self::EmbeddedPackage>> {
Cow::Borrowed(&self.install.embedded)
}

fn embedded_as_packages(
Expand All @@ -422,8 +422,8 @@ impl Package for PackageSpec {
.collect())
}

fn get_build_options(&self) -> &Vec<Opt> {
&self.build.options
fn get_build_options(&self) -> Cow<'_, [Opt]> {
Cow::from(&self.build.options)
}

fn get_build_requirements(&self) -> crate::Result<Cow<'_, RequirementsList<PinnedRequest>>> {
Expand Down Expand Up @@ -456,7 +456,7 @@ impl Package for PackageSpec {
Ok(Cow::Owned(requests))
}

fn runtime_requirements(&self) -> Cow<'_, crate::RequirementsList<RequestWithOptions>> {
fn runtime_requirements(&self) -> Cow<'_, RequirementsList<RequestWithOptions>> {
Cow::Borrowed(&self.install_requirements_with_options)
}

Expand Down
4 changes: 2 additions & 2 deletions crates/spk-schema/src/v0/platform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@ impl RuntimeEnvironment for Platform {
}

impl Versioned for Platform {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
3 changes: 2 additions & 1 deletion crates/spk-schema/src/v0/recipe_install_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ impl From<RawRecipeInstallSpec> for RecipeInstallSpec {
}
}

let new_components = target_embedded_package.components().names();
let new_component_specs = target_embedded_package.components();
let new_components = new_component_specs.names();
if new_components.is_empty() {
// Empty components set? The embedded package is not allowed
// to have an empty component set.
Expand Down
5 changes: 3 additions & 2 deletions crates/spk-schema/src/v0/recipe_install_spec_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
// https://github.com/spkenv/spk

use std::borrow::Cow;
use std::collections::{HashMap, HashSet};
use std::str::FromStr;

Expand Down Expand Up @@ -73,8 +74,8 @@ fn test_render_all_pins_renders_requirements_in_components() {
}

impl Versioned for FakeBuild {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
4 changes: 2 additions & 2 deletions crates/spk-schema/src/v0/recipe_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ impl RuntimeEnvironment for RecipeSpec {
}

impl Versioned for RecipeSpec {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down
9 changes: 5 additions & 4 deletions crates/spk-schema/src/v1/platform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ pub struct Platform {
pub platform: VersionIdent,
#[serde(default, skip_serializing_if = "IsDefault::is_default")]
pub meta: Meta,
#[serde(default, skip_serializing_if = "IsDefault::is_default")]
#[serde(default, skip_serializing_if = "Compat::is_default")]
pub compat: Compat,
#[serde(default, skip_serializing_if = "is_false")]
pub deprecated: bool,
Expand Down Expand Up @@ -117,8 +117,8 @@ impl RuntimeEnvironment for Platform {
}

impl Versioned for Platform {
fn compat(&self) -> &Compat {
&self.compat
fn compat(&self) -> Cow<'_, Compat> {
Cow::Borrowed(&self.compat)
}
}

Expand Down Expand Up @@ -277,7 +277,8 @@ fn apply_inherit_from_base_component(
for requirement in base.runtime_requirements().iter() {
cmpt.requirements.insert_or_replace(requirement.clone());
}
let Some(base_cmpt) = base.components().get(inherit) else {
let component_specs = base.components();
let Some(base_cmpt) = component_specs.get(inherit) else {
return;
};
for requirement in base_cmpt.requirements().iter() {
Expand Down
Loading
Loading