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
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/uv-bench/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ uv-pypi-types = { workspace = true }
uv-python = { workspace = true }
uv-resolver = { workspace = true }
uv-types = { workspace = true }
uv-workspace = { workspace = true }

anyhow = { workspace = true }
codspeed-criterion-compat = { version = "2.7.2", default-features = false, optional = true }
Expand Down
3 changes: 3 additions & 0 deletions crates/uv-bench/benches/uv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ mod resolver {
Resolver, ResolverEnvironment, ResolverOutput,
};
use uv_types::{BuildIsolation, EmptyInstalledPackages, HashStrategy};
use uv_workspace::WorkspaceCache;

static MARKERS: LazyLock<MarkerEnvironment> = LazyLock::new(|| {
MarkerEnvironment::try_from(MarkerEnvironmentBuilder {
Expand Down Expand Up @@ -161,6 +162,7 @@ mod resolver {
let sources = SourceStrategy::default();
let dependency_metadata = DependencyMetadata::default();
let conflicts = Conflicts::empty();
let workspace_cache = WorkspaceCache::default();

let python_requirement = if universal {
PythonRequirement::from_requires_python(
Expand Down Expand Up @@ -188,6 +190,7 @@ mod resolver {
&hashes,
exclude_newer,
sources,
workspace_cache,
concurrency,
PreviewMode::Enabled,
);
Expand Down
1 change: 1 addition & 0 deletions crates/uv-build-frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ uv-static = { workspace = true }
uv-types = { workspace = true }
uv-virtualenv = { workspace = true }
uv-warnings = { workspace = true }
uv-workspace = { workspace = true }

anstream = { workspace = true }
fs-err = { workspace = true }
Expand Down
8 changes: 8 additions & 0 deletions crates/uv-build-frontend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ use uv_python::{Interpreter, PythonEnvironment};
use uv_static::EnvVars;
use uv_types::{AnyErrorBuild, BuildContext, BuildIsolation, BuildStack, SourceBuildTrait};
use uv_warnings::warn_user_once;
use uv_workspace::WorkspaceCache;

pub use crate::error::{Error, MissingHeaderCause};

Expand Down Expand Up @@ -269,6 +270,7 @@ impl SourceBuild {
version_id: Option<&str>,
locations: &IndexLocations,
source_strategy: SourceStrategy,
workspace_cache: &WorkspaceCache,
config_settings: ConfigSettings,
build_isolation: BuildIsolation<'_>,
build_stack: &BuildStack,
Expand All @@ -294,6 +296,7 @@ impl SourceBuild {
fallback_package_name,
locations,
source_strategy,
workspace_cache,
&default_backend,
)
.await
Expand Down Expand Up @@ -396,6 +399,7 @@ impl SourceBuild {
version_id,
locations,
source_strategy,
workspace_cache,
build_stack,
build_kind,
level,
Expand Down Expand Up @@ -466,6 +470,7 @@ impl SourceBuild {
package_name: Option<&PackageName>,
locations: &IndexLocations,
source_strategy: SourceStrategy,
workspace_cache: &WorkspaceCache,
default_backend: &Pep517Backend,
) -> Result<(Pep517Backend, Option<Project>), Box<Error>> {
match fs::read_to_string(source_tree.join("pyproject.toml")) {
Expand Down Expand Up @@ -496,6 +501,7 @@ impl SourceBuild {
install_path,
locations,
source_strategy,
workspace_cache,
)
.await
.map_err(Error::Lowering)?;
Expand Down Expand Up @@ -857,6 +863,7 @@ async fn create_pep517_build_environment(
version_id: Option<&str>,
locations: &IndexLocations,
source_strategy: SourceStrategy,
workspace_cache: &WorkspaceCache,
build_stack: &BuildStack,
build_kind: BuildKind,
level: BuildOutput,
Expand Down Expand Up @@ -957,6 +964,7 @@ async fn create_pep517_build_environment(
install_path,
locations,
source_strategy,
workspace_cache,
)
.await
.map_err(Error::Lowering)?;
Expand Down
1 change: 1 addition & 0 deletions crates/uv-dispatch/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ uv-python = { workspace = true }
uv-resolver = { workspace = true }
uv-types = { workspace = true }
uv-version = { workspace = true }
uv-workspace = { workspace = true }

anyhow = { workspace = true }
futures = { workspace = true }
Expand Down
10 changes: 9 additions & 1 deletion crates/uv-dispatch/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ use uv_types::{
AnyErrorBuild, BuildContext, BuildIsolation, BuildStack, EmptyInstalledPackages, HashStrategy,
InFlight,
};
use uv_workspace::WorkspaceCache;

#[derive(Debug, Error)]
pub enum BuildDispatchError {
Expand Down Expand Up @@ -94,6 +95,7 @@ pub struct BuildDispatch<'a> {
source_build_context: SourceBuildContext,
build_extra_env_vars: FxHashMap<OsString, OsString>,
sources: SourceStrategy,
workspace_cache: WorkspaceCache,
concurrency: Concurrency,
preview: PreviewMode,
}
Expand All @@ -116,6 +118,7 @@ impl<'a> BuildDispatch<'a> {
hasher: &'a HashStrategy,
exclude_newer: Option<ExcludeNewer>,
sources: SourceStrategy,
workspace_cache: WorkspaceCache,
concurrency: Concurrency,
preview: PreviewMode,
) -> Self {
Expand All @@ -137,8 +140,8 @@ impl<'a> BuildDispatch<'a> {
exclude_newer,
source_build_context: SourceBuildContext::default(),
build_extra_env_vars: FxHashMap::default(),

sources,
workspace_cache,
concurrency,
preview,
}
Expand Down Expand Up @@ -200,6 +203,10 @@ impl BuildContext for BuildDispatch<'_> {
self.index_locations
}

fn workspace_cache(&self) -> &WorkspaceCache {
&self.workspace_cache
}

async fn resolve<'data>(
&'data self,
requirements: &'data [Requirement],
Expand Down Expand Up @@ -417,6 +424,7 @@ impl BuildContext for BuildDispatch<'_> {
version_id,
self.index_locations,
sources,
self.workspace_cache(),
self.config_settings.clone(),
self.build_isolation,
&build_stack,
Expand Down
7 changes: 5 additions & 2 deletions crates/uv-distribution/src/metadata/build_requires.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ use uv_configuration::SourceStrategy;
use uv_distribution_types::IndexLocations;
use uv_normalize::PackageName;
use uv_workspace::pyproject::ToolUvSources;
use uv_workspace::{DiscoveryOptions, MemberDiscovery, ProjectWorkspace, Workspace};
use uv_workspace::{
DiscoveryOptions, MemberDiscovery, ProjectWorkspace, Workspace, WorkspaceCache,
};

use crate::metadata::{LoweredRequirement, MetadataError};

Expand Down Expand Up @@ -37,6 +39,7 @@ impl BuildRequires {
install_path: &Path,
locations: &IndexLocations,
sources: SourceStrategy,
cache: &WorkspaceCache,
) -> Result<Self, MetadataError> {
let discovery = match sources {
SourceStrategy::Enabled => DiscoveryOptions::default(),
Expand All @@ -48,7 +51,7 @@ impl BuildRequires {

// TODO(konsti): Cache workspace discovery.
let Some(project_workspace) =
ProjectWorkspace::from_maybe_project_root(install_path, &discovery).await?
ProjectWorkspace::from_maybe_project_root(install_path, &discovery, cache).await?
else {
return Ok(Self::from_metadata23(metadata));
};
Expand Down
4 changes: 3 additions & 1 deletion crates/uv-distribution/src/metadata/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{HashDigests, ResolutionMetadata};
use uv_workspace::dependency_groups::DependencyGroupError;
use uv_workspace::WorkspaceError;
use uv_workspace::{WorkspaceCache, WorkspaceError};

pub use crate::metadata::build_requires::BuildRequires;
pub use crate::metadata::lowering::LoweredRequirement;
Expand Down Expand Up @@ -80,6 +80,7 @@ impl Metadata {
git_source: Option<&GitWorkspaceMember<'_>>,
locations: &IndexLocations,
sources: SourceStrategy,
cache: &WorkspaceCache,
) -> Result<Self, MetadataError> {
// Lower the requirements.
let requires_dist = uv_pypi_types::RequiresDist {
Expand All @@ -100,6 +101,7 @@ impl Metadata {
git_source,
locations,
sources,
cache,
)
.await?;

Expand Down
12 changes: 8 additions & 4 deletions crates/uv-distribution/src/metadata/requires_dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep508::MarkerTree;
use uv_workspace::dependency_groups::FlatDependencyGroups;
use uv_workspace::pyproject::{Sources, ToolUvSources};
use uv_workspace::{DiscoveryOptions, MemberDiscovery, ProjectWorkspace};
use uv_workspace::{DiscoveryOptions, MemberDiscovery, ProjectWorkspace, WorkspaceCache};

use crate::metadata::{GitWorkspaceMember, LoweredRequirement, MetadataError};
use crate::Metadata;
Expand Down Expand Up @@ -49,6 +49,7 @@ impl RequiresDist {
git_member: Option<&GitWorkspaceMember<'_>>,
locations: &IndexLocations,
sources: SourceStrategy,
cache: &WorkspaceCache,
) -> Result<Self, MetadataError> {
// TODO(konsti): Cache workspace discovery.
let discovery_options = DiscoveryOptions {
Expand All @@ -57,14 +58,16 @@ impl RequiresDist {
.fetch_root
.parent()
.expect("git checkout has a parent")
.to_path_buf()
}),
members: match sources {
SourceStrategy::Enabled => MemberDiscovery::default(),
SourceStrategy::Disabled => MemberDiscovery::None,
},
};
let Some(project_workspace) =
ProjectWorkspace::from_maybe_project_root(install_path, &discovery_options).await?
ProjectWorkspace::from_maybe_project_root(install_path, &discovery_options, cache)
.await?
else {
return Ok(Self::from_metadata23(metadata));
};
Expand Down Expand Up @@ -475,7 +478,7 @@ mod test {
use uv_normalize::PackageName;
use uv_pep508::Requirement;
use uv_workspace::pyproject::PyProjectToml;
use uv_workspace::{DiscoveryOptions, ProjectWorkspace};
use uv_workspace::{DiscoveryOptions, ProjectWorkspace, WorkspaceCache};

use crate::metadata::requires_dist::FlatRequiresDist;
use crate::RequiresDist;
Expand All @@ -491,9 +494,10 @@ mod test {
.context("metadata field project not found")?,
&pyproject_toml,
&DiscoveryOptions {
stop_discovery_at: Some(path),
stop_discovery_at: Some(path.to_path_buf()),
..DiscoveryOptions::default()
},
&WorkspaceCache::default(),
)
.await?;
let requires_dist = uv_pypi_types::RequiresDist::parse_pyproject_toml(contents)?;
Expand Down
9 changes: 9 additions & 0 deletions crates/uv-distribution/src/source/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1171,6 +1171,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
None,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1223,6 +1224,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
None,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1271,6 +1273,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
None,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1328,6 +1331,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
None,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
))
Expand Down Expand Up @@ -1395,6 +1399,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
None,
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?;
Ok(Some(requires_dist))
Expand Down Expand Up @@ -1653,6 +1658,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
Some(&git_member),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1685,6 +1691,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
Some(&git_member),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1736,6 +1743,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
Some(&git_member),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
));
Expand Down Expand Up @@ -1793,6 +1801,7 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
Some(&git_member),
self.build_context.locations(),
self.build_context.sources(),
self.build_context.workspace_cache(),
)
.await?,
))
Expand Down
1 change: 1 addition & 0 deletions crates/uv-types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ uv-pep440 = { workspace = true }
uv-pep508 = { workspace = true }
uv-pypi-types = { workspace = true }
uv-python = { workspace = true }
uv-workspace = { workspace = true }

anyhow = { workspace = true }
rustc-hash = { workspace = true }
Expand Down
Loading