Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
879aed1
chore(deps): bump uv to 0.9.11
baszalmstra May 8, 2026
1c1037a
chore(deps): bump uv to 0.9.12
baszalmstra May 8, 2026
97d9d73
chore(deps): bump uv to 0.9.13
baszalmstra May 8, 2026
0182283
chore(deps): bump uv to 0.9.14
baszalmstra May 8, 2026
b1a86ec
chore(deps): bump uv to 0.9.15
baszalmstra May 8, 2026
918d934
chore(deps): bump uv to 0.9.16
baszalmstra May 8, 2026
1e71021
chore(deps): bump uv to 0.9.17
baszalmstra May 8, 2026
66fa1d9
chore(deps): bump uv to 0.9.18
baszalmstra May 8, 2026
77efcd3
chore(deps): bump uv to 0.9.20
baszalmstra May 8, 2026
225e7bc
chore(deps): bump uv to 0.9.21
baszalmstra May 8, 2026
c02e78d
chore(deps): bump uv to 0.9.22
baszalmstra May 8, 2026
28f1457
chore(deps): bump uv to 0.9.23
baszalmstra May 8, 2026
1993f2e
chore(deps): bump uv to 0.9.24
baszalmstra May 8, 2026
482b661
chore(deps): bump uv to 0.9.25
baszalmstra May 8, 2026
aa2f2d9
chore(deps): bump uv to 0.9.26
baszalmstra May 8, 2026
a682aaa
chore(deps): bump uv to 0.9.27
baszalmstra May 8, 2026
aeba53d
chore(deps): bump uv to 0.9.28
baszalmstra May 8, 2026
7771268
chore(deps): bump uv to 0.9.29
baszalmstra May 8, 2026
a1740cd
chore(deps): bump uv to 0.9.30
baszalmstra May 8, 2026
a972452
chore(deps): bump uv to 0.10.0
baszalmstra May 8, 2026
37a78b8
chore(deps): bump uv to 0.10.1
baszalmstra May 8, 2026
dd0c1a7
chore(deps): bump uv to 0.10.2
baszalmstra May 8, 2026
be60641
chore(deps): bump uv to 0.10.3
baszalmstra May 8, 2026
4c1faa0
chore(deps): bump uv to 0.10.4
baszalmstra May 8, 2026
f66cb9d
chore(deps): bump uv to 0.10.5
baszalmstra May 8, 2026
787dbe7
chore(deps): bump uv to 0.10.6
baszalmstra May 8, 2026
7639716
chore(deps): bump uv to 0.10.7
baszalmstra May 8, 2026
497b3da
chore(deps): bump uv to 0.10.8
baszalmstra May 8, 2026
5b663b2
chore(deps): bump uv to 0.10.9
baszalmstra May 8, 2026
2ef0aac
chore(deps): bump uv to 0.10.10
baszalmstra May 8, 2026
4d368b6
chore(deps): bump uv to 0.10.11
baszalmstra May 8, 2026
cb39fcd
chore(deps): bump uv to 0.10.12
baszalmstra May 8, 2026
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
904 changes: 465 additions & 439 deletions Cargo.lock

Large diffs are not rendered by default.

57 changes: 28 additions & 29 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -184,35 +184,34 @@ tracing-test = "0.2"
typed-path = "0.12.0"
# Bumping this to a higher version breaks the Windows path handling.
url = "2.5.4"
uv-auth = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-build-frontend = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-cache = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-cache-info = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-cache-key = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-client = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-configuration = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-dispatch = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-distribution = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-distribution-filename = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-distribution-types = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-flags = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-git = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-git-types = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-install-wheel = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-installer = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-normalize = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-pep440 = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-pep508 = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-platform-tags = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-preview = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-pypi-types = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-python = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-redacted = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-requirements = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-requirements-txt = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-resolver = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-types = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-workspace = { git = "https://github.com/astral-sh/uv", tag = "0.9.10" }
uv-build-frontend = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-cache = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-cache-info = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-cache-key = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-client = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-configuration = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-dispatch = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-distribution = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-distribution-filename = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-distribution-types = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-flags = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-git = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-git-types = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-install-wheel = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-installer = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-normalize = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-pep440 = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-pep508 = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-platform-tags = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-preview = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-pypi-types = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-python = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-redacted = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-requirements = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-requirements-txt = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-resolver = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-types = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
uv-workspace = { git = "https://github.com/astral-sh/uv", tag = "0.10.12" }
which = "8.0.0"
xxhash-rust = "0.8.15"
zip = { version = "8.0.0", default-features = false }
Expand Down
1 change: 0 additions & 1 deletion crates/pixi_cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ tracing = { workspace = true }
tracing-subscriber = { workspace = true, features = ["env-filter"] }
typed-path = { workspace = true }
url = { workspace = true }
uv-client = { workspace = true }
uv-configuration = { workspace = true }
uv-pep508 = { workspace = true }
uv-pypi-types = { workspace = true }
Expand Down
11 changes: 3 additions & 8 deletions crates/pixi_cli/src/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ use pixi_uv_conversions::convert_uv_requirements_to_pep508;
use rattler_conda_types::Platform;

use tracing::warn;
use uv_client::BaseClientBuilder;
use uv_requirements_txt::RequirementsTxt;

use miette::{Diagnostic, IntoDiagnostic, Result};
Expand Down Expand Up @@ -198,13 +197,9 @@ async fn import(args: Args, format: &ImportFileFormat) -> miette::Result<()> {
(conda_deps, pypi_deps)
}
ProcessedInput::PypiTxt => {
let reqs_txt = RequirementsTxt::parse(
&input_file,
workspace.workspace().root(),
&BaseClientBuilder::default(),
)
.await
.into_diagnostic()?;
let reqs_txt = RequirementsTxt::parse(&input_file, workspace.workspace().root())
.await
.into_diagnostic()?;
let pypi_deps = convert_uv_requirements_txt_to_pep508(reqs_txt)?;

(vec![], pypi_deps)
Expand Down
28 changes: 18 additions & 10 deletions crates/pixi_core/src/lock_file/resolve/build_dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ use uv_build_frontend::SourceBuild;
use uv_cache::Cache;
use uv_client::RegistryClient;
use uv_configuration::{
BuildKind, BuildOptions, BuildOutput, Concurrency, Constraints, IndexStrategy, SourceStrategy,
BuildKind, BuildOptions, BuildOutput, Concurrency, Constraints, IndexStrategy, NoSources,
};
use uv_dispatch::{BuildDispatch, BuildDispatchError, SharedState};
use uv_distribution_filename::DistFilename;
Expand Down Expand Up @@ -70,7 +70,7 @@ pub struct UvBuildDispatchParams<'a> {
shared_state: SharedState,
link_mode: uv_install_wheel::LinkMode,
exclude_newer: Option<ExcludeNewer>,
sources: SourceStrategy,
sources: NoSources,
concurrency: Concurrency,
preview: uv_preview::Preview,
workspace_cache: WorkspaceCache,
Expand Down Expand Up @@ -105,7 +105,7 @@ impl<'a> UvBuildDispatchParams<'a> {
link_mode: LinkMode::default(),
constraints: Constraints::default(),
exclude_newer: None,
sources: SourceStrategy::default(),
sources: NoSources::default(),
concurrency: Concurrency::default(),
preview: uv_preview::Preview::default(),
workspace_cache: WorkspaceCache::default(),
Expand All @@ -125,7 +125,7 @@ impl<'a> UvBuildDispatchParams<'a> {
}

/// Set the source strategy for the build dispatch
pub fn with_source_strategy(mut self, sources: SourceStrategy) -> Self {
pub fn with_no_sources(mut self, sources: NoSources) -> Self {
self.sources = sources;
self
}
Expand Down Expand Up @@ -424,9 +424,9 @@ impl<'a> LazyBuildDispatch<'a> {
self.params.build_options,
self.params.hasher,
self.params.exclude_newer.clone().unwrap_or_default(),
self.params.sources,
self.params.sources.clone(),
self.params.workspace_cache.clone(),
self.params.concurrency,
self.params.concurrency.clone(),
self.params.preview,
)
.with_build_extra_env_vars(env_vars);
Expand Down Expand Up @@ -478,8 +478,8 @@ impl BuildContext for LazyBuildDispatch<'_> {
self.params.config_settings
}

fn sources(&self) -> uv_configuration::SourceStrategy {
self.params.sources
fn sources(&self) -> &uv_configuration::NoSources {
&self.params.sources
}

fn locations(&self) -> &uv_distribution_types::IndexLocations {
Expand Down Expand Up @@ -518,7 +518,7 @@ impl BuildContext for LazyBuildDispatch<'_> {
install_path: &'a Path,
version_id: Option<&'a str>,
dist: Option<&'a SourceDist>,
sources: SourceStrategy,
sources: &'a NoSources,
build_kind: BuildKind,
build_output: BuildOutput,
build_stack: BuildStack,
Expand All @@ -545,12 +545,20 @@ impl BuildContext for LazyBuildDispatch<'_> {
source: &'a Path,
subdirectory: Option<&'a Path>,
output_dir: &'a Path,
sources: uv_configuration::NoSources,
build_kind: BuildKind,
version_id: Option<&'a str>,
) -> Result<Option<DistFilename>, impl IsBuildBackendError> {
let dispatch = self.get_or_try_init().await?;
dispatch
.direct_build(source, subdirectory, output_dir, build_kind, version_id)
.direct_build(
source,
subdirectory,
output_dir,
sources,
build_kind,
version_id,
)
.await
.map_err(LazyBuildDispatchError::from)
}
Expand Down
14 changes: 7 additions & 7 deletions crates/pixi_core/src/lock_file/resolve/pypi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -581,8 +581,8 @@ pub async fn resolve_pypi(
// mostly with build isolation. In that case we want to use fresh
// non-tampered requests.
.with_shared_state(context.shared_state.fork())
.with_source_strategy(context.source_strategy)
.with_concurrency(context.concurrency)
.with_no_sources(context.no_sources.clone())
.with_concurrency(context.concurrency.clone())
.with_link_mode(link_mode);

// Use cached build dispatch dependencies
Expand Down Expand Up @@ -734,7 +734,7 @@ pub async fn resolve_pypi(
DistributionDatabase::new(
&registry_client,
&lazy_build_dispatch,
context.concurrency.downloads,
context.concurrency.downloads_semaphore.clone(),
),
)
.with_reporter(UvReporter::new_arc(
Expand Down Expand Up @@ -763,7 +763,7 @@ pub async fn resolve_pypi(
DistributionDatabase::new(
&registry_client,
&lazy_build_dispatch,
context.concurrency.downloads,
context.concurrency.downloads_semaphore.clone(),
),
&flat_index,
Some(&provider_tags),
Expand Down Expand Up @@ -833,7 +833,7 @@ pub async fn resolve_pypi(
&registry_client,
resolution,
&context.capabilities,
context.concurrency.downloads,
context.concurrency.downloads_semaphore.clone(),
project_root,
&original_git_references,
)
Expand Down Expand Up @@ -997,13 +997,13 @@ async fn lock_pypi_packages(
registry_client: &Arc<RegistryClient>,
resolution: Resolution,
index_capabilities: &IndexCapabilities,
concurrent_downloads: usize,
downloads_semaphore: Arc<tokio::sync::Semaphore>,
abs_project_root: &Path,
original_git_references: &HashMap<uv_normalize::PackageName, pixi_spec::GitReference>,
) -> miette::Result<LockedPypiRecords> {
let mut locked_packages = Vec::with_capacity(resolution.len());
let database =
DistributionDatabase::new(registry_client, pixi_build_dispatch, concurrent_downloads);
DistributionDatabase::new(registry_client, pixi_build_dispatch, downloads_semaphore);
for dist in resolution.distributions() {
// If this refers to a conda package we can skip it
if conda_python_packages.contains_key(dist.name()) {
Expand Down
8 changes: 4 additions & 4 deletions crates/pixi_core/src/lock_file/satisfiability/pypi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -639,8 +639,8 @@ async fn read_local_package_metadata(
.with_index_strategy(index_strategy)
.with_workspace_cache(ctx.uv_context.workspace_cache.clone())
.with_shared_state(ctx.uv_context.shared_state.fork())
.with_source_strategy(ctx.uv_context.source_strategy)
.with_concurrency(ctx.uv_context.concurrency);
.with_no_sources(ctx.uv_context.no_sources.clone())
.with_concurrency(ctx.uv_context.concurrency.clone());

// Get or create conda prefix updater for the environment
// Use best_platform() because we can only install/run Python on the host platform
Expand Down Expand Up @@ -700,7 +700,7 @@ async fn read_local_package_metadata(
let database = DistributionDatabase::new(
&registry_client,
&lazy_build_dispatch,
ctx.uv_context.concurrency.downloads,
ctx.uv_context.concurrency.downloads_semaphore.clone(),
);

// Missing or unparsable pyproject -> trust the lock.
Expand All @@ -709,7 +709,7 @@ async fn read_local_package_metadata(
tracing::debug!(package = %package_name, "no readable pyproject.toml");
return Ok(None);
};
let Ok(pyproject_toml) = PyProjectToml::from_toml(&contents) else {
let Ok(pyproject_toml) = PyProjectToml::from_toml(&contents, pyproject_path.display()) else {
tracing::debug!(package = %package_name, "pyproject.toml could not be parsed");
return Ok(None);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ dependencies = ["numpy"]
test = ["pytest"]
dev = ["foo[test]"]
"#;
let pyproject = uv_pypi_types::PyProjectToml::from_toml(toml).unwrap();
let pyproject = uv_pypi_types::PyProjectToml::from_toml(toml, "").unwrap();
let requires_dist = uv_pypi_types::RequiresDist::from_pyproject_toml(pyproject).unwrap();
let rendered: Vec<String> = requires_dist
.requires_dist
Expand Down
1 change: 0 additions & 1 deletion crates/pixi_install_pypi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ tokio = { workspace = true }
tracing = { workspace = true }
typed-path = { workspace = true }
url = { workspace = true }
uv-auth = { workspace = true }
uv-cache = { workspace = true }
uv-cache-info = { workspace = true }
uv-client = { workspace = true }
Expand Down
20 changes: 14 additions & 6 deletions crates/pixi_install_pypi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ use rattler_conda_types::Platform;
use rattler_lock::{PypiDistributionData, PypiIndexes, PypiPackageData, UrlOrPath};
use rayon::prelude::*;
use utils::elapsed;
use uv_auth::store_credentials_from_url;
use uv_client::{Connectivity, FlatIndexClient, RegistryClient};
use uv_configuration::{BuildOptions, Constraints, IndexStrategy};
use uv_dispatch::BuildDispatch;
Expand Down Expand Up @@ -904,13 +903,22 @@ impl<'a> PyPIEnvironmentUpdater<'a> {
let distribution_database = DistributionDatabase::new(
setup.registry_client.as_ref(),
&build_dispatch,
self.context_config.uv_context.concurrency.downloads,
self.context_config
.uv_context
.concurrency
.downloads_semaphore
.clone(),
);

// Before hitting the network let's make sure the credentials are available to
// uv
// uv. As of uv 0.9.16, the global credentials cache moved to a per-client
// `CredentialsCache` reachable via the `BaseClient` underneath
// `RegistryClient`'s `CachedClient`.
let base_client = setup.registry_client.cached_client().uncached();
for url in setup.index_locations.indexes().map(|index| index.url()) {
let success = store_credentials_from_url(url.url());
let success = base_client
.credentials_cache()
.store_credentials_from_url(url.url());
tracing::debug!("Stored credentials for {}: {}", url, success);
}

Expand Down Expand Up @@ -974,9 +982,9 @@ impl<'a> PyPIEnvironmentUpdater<'a> {
&setup.build_options,
&self.context_config.uv_context.hash_strategy,
setup.exclude_newer.clone(),
self.context_config.uv_context.source_strategy,
self.context_config.uv_context.no_sources.clone(),
self.context_config.uv_context.workspace_cache.clone(),
self.context_config.uv_context.concurrency,
self.context_config.uv_context.concurrency.clone(),
self.context_config.uv_context.preview,
)
// Important: this passes any CONDA activation to the uv build process
Expand Down
1 change: 1 addition & 0 deletions crates/pixi_install_pypi/src/plan/test/harness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ impl InstalledDistBuilder {
.reference()
.as_str()
.map(ToString::to_string),
git_lfs: None,
},
};

Expand Down
14 changes: 5 additions & 9 deletions crates/pixi_uv_context/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use uv_cache::Cache;
use uv_client::{
BaseClientBuilder, Connectivity, ExtraMiddleware, RegistryClient, RegistryClientBuilder,
};
use uv_configuration::{Concurrency, IndexStrategy, SourceStrategy, TrustedHost};
use uv_configuration::{Concurrency, IndexStrategy, NoSources, TrustedHost};
use uv_dispatch::SharedState;
use uv_distribution_types::{
ExtraBuildRequires, ExtraBuildVariables, IndexCapabilities, IndexLocations,
Expand All @@ -31,7 +31,7 @@ pub struct UvResolutionContext {
pub hash_strategy: HashStrategy,
pub keyring_provider: uv_configuration::KeyringProviderType,
pub concurrency: Concurrency,
pub source_strategy: SourceStrategy,
pub no_sources: NoSources,
pub capabilities: IndexCapabilities,
pub allow_insecure_host: Vec<TrustedHost>,
pub shared_state: SharedState,
Expand Down Expand Up @@ -144,11 +144,7 @@ fn build_concurrency(config: &Config) -> Concurrency {
let builds = read_usize_env("UV_CONCURRENT_BUILDS").unwrap_or(defaults.builds);
let installs = read_usize_env("UV_CONCURRENT_INSTALLS").unwrap_or(defaults.installs);

Concurrency {
downloads,
builds,
installs,
}
Concurrency::new(downloads, builds, installs)
}

impl UvResolutionContext {
Expand Down Expand Up @@ -197,7 +193,7 @@ impl UvResolutionContext {
hash_strategy: HashStrategy::None,
keyring_provider,
concurrency,
source_strategy: SourceStrategy::Enabled,
no_sources: NoSources::None,
capabilities: IndexCapabilities::default(),
allow_insecure_host,
shared_state: SharedState::default(),
Expand Down Expand Up @@ -253,7 +249,7 @@ impl UvResolutionContext {
.extra_middleware(self.extra_middleware.clone());

if let Some(timeout) = self.http_timeout {
base_client_builder = base_client_builder.timeout(timeout);
base_client_builder = base_client_builder.read_timeout(timeout);
}

if let Some(retries) = self.http_retries {
Expand Down
Loading