Skip to content

Commit e724ddc

Browse files
Allow --config-settings-package to apply configuration settings at the package level (#14573)
## Summary Closes #14564. Closes #10940.
1 parent a6a5e65 commit e724ddc

File tree

30 files changed

+927
-58
lines changed

30 files changed

+927
-58
lines changed

crates/uv-bench/benches/uv.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ mod resolver {
8686
use uv_cache::Cache;
8787
use uv_client::RegistryClient;
8888
use uv_configuration::{
89-
BuildOptions, Concurrency, ConfigSettings, Constraints, IndexStrategy, PreviewMode,
90-
SourceStrategy,
89+
BuildOptions, Concurrency, ConfigSettings, Constraints, IndexStrategy,
90+
PackageConfigSettings, PreviewMode, SourceStrategy,
9191
};
9292
use uv_dispatch::{BuildDispatch, SharedState};
9393
use uv_distribution::DistributionDatabase;
@@ -144,6 +144,7 @@ mod resolver {
144144
let build_options = BuildOptions::default();
145145
let concurrency = Concurrency::default();
146146
let config_settings = ConfigSettings::default();
147+
let config_settings_package = PackageConfigSettings::default();
147148
let exclude_newer = Some(
148149
jiff::civil::date(2024, 9, 1)
149150
.to_zoned(jiff::tz::TimeZone::UTC)
@@ -184,6 +185,7 @@ mod resolver {
184185
state,
185186
IndexStrategy::default(),
186187
&config_settings,
188+
&config_settings_package,
187189
build_isolation,
188190
LinkMode::default(),
189191
&build_options,

crates/uv-cli/src/lib.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ use clap::{Args, Parser, Subcommand};
1010

1111
use uv_cache::CacheArgs;
1212
use uv_configuration::{
13-
ConfigSettingEntry, ExportFormat, IndexStrategy, KeyringProviderType, PackageNameSpecifier,
14-
ProjectBuildBackend, TargetTriple, TrustedHost, TrustedPublishing, VersionControlSystem,
13+
ConfigSettingEntry, ConfigSettingPackageEntry, ExportFormat, IndexStrategy,
14+
KeyringProviderType, PackageNameSpecifier, ProjectBuildBackend, TargetTriple, TrustedHost,
15+
TrustedPublishing, VersionControlSystem,
1516
};
1617
use uv_distribution_types::{Index, IndexUrl, Origin, PipExtraIndex, PipFindLinks, PipIndex};
1718
use uv_normalize::{ExtraName, GroupName, PackageName, PipGroupName};
@@ -4693,6 +4694,14 @@ pub struct ToolUpgradeArgs {
46934694
)]
46944695
pub config_setting: Option<Vec<ConfigSettingEntry>>,
46954696

4697+
/// Settings to pass to the PEP 517 build backend for a specific package, specified as `PACKAGE:KEY=VALUE` pairs.
4698+
#[arg(
4699+
long,
4700+
alias = "config-settings-package",
4701+
help_heading = "Build options"
4702+
)]
4703+
pub config_setting_package: Option<Vec<ConfigSettingPackageEntry>>,
4704+
46964705
/// Disable isolation when building source distributions.
46974706
///
46984707
/// Assumes that build dependencies specified by PEP 518 are already installed.
@@ -5484,6 +5493,14 @@ pub struct InstallerArgs {
54845493
)]
54855494
pub config_setting: Option<Vec<ConfigSettingEntry>>,
54865495

5496+
/// Settings to pass to the PEP 517 build backend for a specific package, specified as `PACKAGE:KEY=VALUE` pairs.
5497+
#[arg(
5498+
long,
5499+
alias = "config-settings-package",
5500+
help_heading = "Build options"
5501+
)]
5502+
pub config_settings_package: Option<Vec<ConfigSettingPackageEntry>>,
5503+
54875504
/// Disable isolation when building source distributions.
54885505
///
54895506
/// Assumes that build dependencies specified by PEP 518 are already installed.
@@ -5671,6 +5688,14 @@ pub struct ResolverArgs {
56715688
)]
56725689
pub config_setting: Option<Vec<ConfigSettingEntry>>,
56735690

5691+
/// Settings to pass to the PEP 517 build backend for a specific package, specified as `PACKAGE:KEY=VALUE` pairs.
5692+
#[arg(
5693+
long,
5694+
alias = "config-settings-package",
5695+
help_heading = "Build options"
5696+
)]
5697+
pub config_settings_package: Option<Vec<ConfigSettingPackageEntry>>,
5698+
56745699
/// Disable isolation when building source distributions.
56755700
///
56765701
/// Assumes that build dependencies specified by PEP 518 are already installed.
@@ -5860,6 +5885,14 @@ pub struct ResolverInstallerArgs {
58605885
)]
58615886
pub config_setting: Option<Vec<ConfigSettingEntry>>,
58625887

5888+
/// Settings to pass to the PEP 517 build backend for a specific package, specified as `PACKAGE:KEY=VALUE` pairs.
5889+
#[arg(
5890+
long,
5891+
alias = "config-settings-package",
5892+
help_heading = "Build options"
5893+
)]
5894+
pub config_settings_package: Option<Vec<ConfigSettingPackageEntry>>,
5895+
58635896
/// Disable isolation when building source distributions.
58645897
///
58655898
/// Assumes that build dependencies specified by PEP 518 are already installed.

crates/uv-cli/src/options.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anstream::eprintln;
22

33
use uv_cache::Refresh;
4-
use uv_configuration::ConfigSettings;
4+
use uv_configuration::{ConfigSettings, PackageConfigSettings};
55
use uv_resolver::PrereleaseMode;
66
use uv_settings::{Combine, PipOptions, ResolverInstallerOptions, ResolverOptions};
77
use uv_warnings::owo_colors::OwoColorize;
@@ -62,6 +62,7 @@ impl From<ResolverArgs> for PipOptions {
6262
pre,
6363
fork_strategy,
6464
config_setting,
65+
config_settings_package,
6566
no_build_isolation,
6667
no_build_isolation_package,
6768
build_isolation,
@@ -84,6 +85,11 @@ impl From<ResolverArgs> for PipOptions {
8485
},
8586
config_settings: config_setting
8687
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
88+
config_settings_package: config_settings_package.map(|config_settings| {
89+
config_settings
90+
.into_iter()
91+
.collect::<PackageConfigSettings>()
92+
}),
8793
no_build_isolation: flag(no_build_isolation, build_isolation, "build-isolation"),
8894
no_build_isolation_package: Some(no_build_isolation_package),
8995
exclude_newer,
@@ -104,6 +110,7 @@ impl From<InstallerArgs> for PipOptions {
104110
index_strategy,
105111
keyring_provider,
106112
config_setting,
113+
config_settings_package,
107114
no_build_isolation,
108115
build_isolation,
109116
exclude_newer,
@@ -120,6 +127,11 @@ impl From<InstallerArgs> for PipOptions {
120127
keyring_provider,
121128
config_settings: config_setting
122129
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
130+
config_settings_package: config_settings_package.map(|config_settings| {
131+
config_settings
132+
.into_iter()
133+
.collect::<PackageConfigSettings>()
134+
}),
123135
no_build_isolation: flag(no_build_isolation, build_isolation, "build-isolation"),
124136
exclude_newer,
125137
link_mode,
@@ -147,6 +159,7 @@ impl From<ResolverInstallerArgs> for PipOptions {
147159
pre,
148160
fork_strategy,
149161
config_setting,
162+
config_settings_package,
150163
no_build_isolation,
151164
no_build_isolation_package,
152165
build_isolation,
@@ -173,6 +186,11 @@ impl From<ResolverInstallerArgs> for PipOptions {
173186
fork_strategy,
174187
config_settings: config_setting
175188
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
189+
config_settings_package: config_settings_package.map(|config_settings| {
190+
config_settings
191+
.into_iter()
192+
.collect::<PackageConfigSettings>()
193+
}),
176194
no_build_isolation: flag(no_build_isolation, build_isolation, "build-isolation"),
177195
no_build_isolation_package: Some(no_build_isolation_package),
178196
exclude_newer,
@@ -260,6 +278,7 @@ pub fn resolver_options(
260278
pre,
261279
fork_strategy,
262280
config_setting,
281+
config_settings_package,
263282
no_build_isolation,
264283
no_build_isolation_package,
265284
build_isolation,
@@ -321,6 +340,11 @@ pub fn resolver_options(
321340
dependency_metadata: None,
322341
config_settings: config_setting
323342
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
343+
config_settings_package: config_settings_package.map(|config_settings| {
344+
config_settings
345+
.into_iter()
346+
.collect::<PackageConfigSettings>()
347+
}),
324348
no_build_isolation: flag(no_build_isolation, build_isolation, "build-isolation"),
325349
no_build_isolation_package: Some(no_build_isolation_package),
326350
exclude_newer,
@@ -353,6 +377,7 @@ pub fn resolver_installer_options(
353377
pre,
354378
fork_strategy,
355379
config_setting,
380+
config_settings_package,
356381
no_build_isolation,
357382
no_build_isolation_package,
358383
build_isolation,
@@ -428,6 +453,11 @@ pub fn resolver_installer_options(
428453
dependency_metadata: None,
429454
config_settings: config_setting
430455
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
456+
config_settings_package: config_settings_package.map(|config_settings| {
457+
config_settings
458+
.into_iter()
459+
.collect::<PackageConfigSettings>()
460+
}),
431461
no_build_isolation: flag(no_build_isolation, build_isolation, "build-isolation"),
432462
no_build_isolation_package: if no_build_isolation_package.is_empty() {
433463
None

0 commit comments

Comments
 (0)