Change Operations API to always accept PythonRequirement (#4498)

## Summary

I think this is more intuitive than taking an `Option` and computing the
requirement if it's `None`.
This commit is contained in:
Charlie Marsh 2024-06-25 02:37:08 +03:00 committed by GitHub
parent 25cde888ae
commit 7946509931
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 29 additions and 22 deletions

View file

@ -211,9 +211,11 @@ pub(crate) async fn pip_compile(
};
// Determine the Python requirement, if the user requested a specific version.
let python_requirement = python_version
.as_ref()
.map(|python_version| PythonRequirement::from_python_version(&interpreter, python_version));
let python_requirement = if let Some(python_version) = python_version.as_ref() {
PythonRequirement::from_python_version(&interpreter, python_version)
} else {
PythonRequirement::from_interpreter(&interpreter)
};
// Determine the environment for the resolution.
let (tags, markers) = resolution_environment(python_version, python_platform, &interpreter)?;
@ -316,7 +318,6 @@ pub(crate) async fn pip_compile(
&hasher,
&Reinstall::None,
&upgrade,
&interpreter,
Some(&tags),
Some(&markers),
python_requirement,

View file

@ -23,7 +23,7 @@ use uv_installer::{SatisfiesResult, SitePackages};
use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_resolver::{
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
ResolutionMode,
PythonRequirement, ResolutionMode,
};
use uv_toolchain::{
EnvironmentPreference, Prefix, PythonEnvironment, PythonVersion, Target, ToolchainRequest,
@ -218,6 +218,13 @@ pub(crate) async fn pip_install(
let interpreter = environment.interpreter();
// Determine the Python requirement, if the user requested a specific version.
let python_requirement = if let Some(python_version) = python_version.as_ref() {
PythonRequirement::from_python_version(interpreter, python_version)
} else {
PythonRequirement::from_interpreter(interpreter)
};
// Determine the environment for the resolution.
let (tags, markers) = resolution_environment(python_version, python_platform, interpreter)?;
@ -327,10 +334,9 @@ pub(crate) async fn pip_install(
&hasher,
&reinstall,
&upgrade,
interpreter,
Some(&tags),
Some(&markers),
None,
python_requirement,
&client,
&flat_index,
&index,

View file

@ -37,7 +37,7 @@ use uv_resolver::{
DependencyMode, Exclusions, FlatIndex, InMemoryIndex, Manifest, Options, Preference,
Preferences, PythonRequirement, ResolutionGraph, Resolver,
};
use uv_toolchain::{Interpreter, PythonEnvironment};
use uv_toolchain::PythonEnvironment;
use uv_types::{HashStrategy, InFlight, InstalledPackagesProvider};
use uv_warnings::warn_user;
@ -87,10 +87,9 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
hasher: &HashStrategy,
reinstall: &Reinstall,
upgrade: &Upgrade,
interpreter: &Interpreter,
tags: Option<&Tags>,
markers: Option<&MarkerEnvironment>,
python_requirement: Option<PythonRequirement>,
python_requirement: PythonRequirement,
client: &RegistryClient,
flat_index: &FlatIndex,
index: &InMemoryIndex,
@ -186,10 +185,6 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
let overrides = Overrides::from_requirements(overrides);
let preferences = Preferences::from_iter(preferences, markers);
// Determine the Python requirement, defaulting to that of the interpreter.
let python_requirement =
python_requirement.unwrap_or_else(|| PythonRequirement::from_interpreter(interpreter));
// Determine any lookahead requirements.
let lookaheads = match options.dependency_mode {
DependencyMode::Transitive => {

View file

@ -22,7 +22,7 @@ use uv_installer::SitePackages;
use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_resolver::{
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
ResolutionMode,
PythonRequirement, ResolutionMode,
};
use uv_toolchain::{
EnvironmentPreference, Prefix, PythonEnvironment, PythonVersion, Target, ToolchainRequest,
@ -169,6 +169,13 @@ pub(crate) async fn pip_sync(
let interpreter = environment.interpreter();
// Determine the Python requirement, if the user requested a specific version.
let python_requirement = if let Some(python_version) = python_version.as_ref() {
PythonRequirement::from_python_version(interpreter, python_version)
} else {
PythonRequirement::from_interpreter(interpreter)
};
// Determine the environment for the resolution.
let (tags, markers) = resolution_environment(python_version, python_platform, interpreter)?;
@ -279,10 +286,9 @@ pub(crate) async fn pip_sync(
&hasher,
&reinstall,
&upgrade,
interpreter,
Some(&tags),
Some(&markers),
None,
python_requirement,
&client,
&flat_index,
&index,

View file

@ -220,10 +220,9 @@ pub(super) async fn do_lock(
&hasher,
&Reinstall::default(),
upgrade,
interpreter,
None,
None,
Some(python_requirement),
python_requirement,
&client,
&flat_index,
&index,

View file

@ -16,7 +16,7 @@ use uv_fs::Simplified;
use uv_git::GitResolver;
use uv_installer::{SatisfiesResult, SitePackages};
use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_resolver::{FlatIndex, InMemoryIndex, OptionsBuilder, RequiresPython};
use uv_resolver::{FlatIndex, InMemoryIndex, OptionsBuilder, PythonRequirement, RequiresPython};
use uv_toolchain::{
request_from_version_file, EnvironmentPreference, Interpreter, PythonEnvironment, Toolchain,
ToolchainPreference, ToolchainRequest, VersionRequest,
@ -345,6 +345,7 @@ pub(crate) async fn update_environment(
let interpreter = venv.interpreter();
let tags = venv.interpreter().tags()?;
let markers = venv.interpreter().markers();
let python_requirement = PythonRequirement::from_interpreter(interpreter);
// Initialize the registry client.
let client = RegistryClientBuilder::new(cache.clone())
@ -421,10 +422,9 @@ pub(crate) async fn update_environment(
&hasher,
reinstall,
upgrade,
interpreter,
Some(tags),
Some(markers),
None,
python_requirement,
&client,
&flat_index,
&index,