mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 13:25:00 +00:00
Use Preferences
struct in Manifest API (#4496)
## Summary This is just a bit more consistent with `Overrides` and `Constraints`.
This commit is contained in:
parent
10ec9c9d0b
commit
604be9ed71
6 changed files with 20 additions and 13 deletions
|
@ -6,7 +6,7 @@ pub use flat_index::FlatIndex;
|
|||
pub use lock::{Lock, LockError};
|
||||
pub use manifest::Manifest;
|
||||
pub use options::{Options, OptionsBuilder};
|
||||
pub use preferences::{Preference, PreferenceError};
|
||||
pub use preferences::{Preference, PreferenceError, Preferences};
|
||||
pub use prerelease_mode::PreReleaseMode;
|
||||
pub use pubgrub::{PubGrubSpecifier, PubGrubSpecifierError};
|
||||
pub use python_requirement::PythonRequirement;
|
||||
|
|
|
@ -6,7 +6,8 @@ use uv_configuration::{Constraints, Overrides};
|
|||
use uv_normalize::{GroupName, PackageName};
|
||||
use uv_types::RequestedRequirements;
|
||||
|
||||
use crate::{preferences::Preference, DependencyMode, Exclusions};
|
||||
use crate::preferences::Preferences;
|
||||
use crate::{DependencyMode, Exclusions};
|
||||
|
||||
/// A manifest of requirements, constraints, and preferences.
|
||||
#[derive(Clone, Debug)]
|
||||
|
@ -29,7 +30,7 @@ pub struct Manifest {
|
|||
/// These represent "preferred" versions of a given package. For example, they may be the
|
||||
/// versions that are already installed in the environment, or already pinned in an existing
|
||||
/// lockfile.
|
||||
pub(crate) preferences: Vec<Preference>,
|
||||
pub(crate) preferences: Preferences,
|
||||
|
||||
/// The name of the project.
|
||||
pub(crate) project: Option<PackageName>,
|
||||
|
@ -55,7 +56,7 @@ impl Manifest {
|
|||
constraints: Constraints,
|
||||
overrides: Overrides,
|
||||
dev: Vec<GroupName>,
|
||||
preferences: Vec<Preference>,
|
||||
preferences: Preferences,
|
||||
project: Option<PackageName>,
|
||||
exclusions: Exclusions,
|
||||
lookaheads: Vec<RequestedRequirements>,
|
||||
|
@ -78,7 +79,7 @@ impl Manifest {
|
|||
constraints: Constraints::default(),
|
||||
overrides: Overrides::default(),
|
||||
dev: Vec::new(),
|
||||
preferences: Vec::new(),
|
||||
preferences: Preferences::default(),
|
||||
project: None,
|
||||
exclusions: Exclusions::default(),
|
||||
lookaheads: Vec::new(),
|
||||
|
|
|
@ -98,8 +98,8 @@ impl Preference {
|
|||
}
|
||||
|
||||
/// A set of pinned packages that should be preserved during resolution, if possible.
|
||||
#[derive(Debug, Clone)]
|
||||
pub(crate) struct Preferences(Arc<FxHashMap<PackageName, Pin>>);
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct Preferences(Arc<FxHashMap<PackageName, Pin>>);
|
||||
|
||||
impl Preferences {
|
||||
/// Create a map of pinned packages from an iterator of [`Preference`] entries.
|
||||
|
@ -107,7 +107,7 @@ impl Preferences {
|
|||
///
|
||||
/// The provided [`MarkerEnvironment`] will be used to filter the preferences
|
||||
/// to an applicable subset.
|
||||
pub(crate) fn from_iter<PreferenceIterator: IntoIterator<Item = Preference>>(
|
||||
pub fn from_iter<PreferenceIterator: IntoIterator<Item = Preference>>(
|
||||
preferences: PreferenceIterator,
|
||||
markers: Option<&MarkerEnvironment>,
|
||||
) -> Self {
|
||||
|
@ -137,6 +137,11 @@ impl Preferences {
|
|||
Self(Arc::new(preferences))
|
||||
}
|
||||
|
||||
/// Returns an iterator over the preferences.
|
||||
pub fn iter(&self) -> impl Iterator<Item = (&PackageName, &Version)> {
|
||||
self.0.iter().map(|(name, pin)| (name, pin.version()))
|
||||
}
|
||||
|
||||
/// Return the pinned version for a package, if any.
|
||||
pub(crate) fn version(&self, package_name: &PackageName) -> Option<&Version> {
|
||||
self.0.get(package_name).map(Pin::version)
|
||||
|
|
|
@ -213,7 +213,7 @@ impl<Provider: ResolverProvider, InstalledPackages: InstalledPackagesProvider>
|
|||
constraints: manifest.constraints,
|
||||
overrides: manifest.overrides,
|
||||
dev: manifest.dev,
|
||||
preferences: Preferences::from_iter(manifest.preferences, markers),
|
||||
preferences: manifest.preferences,
|
||||
exclusions: manifest.exclusions,
|
||||
hasher: hasher.clone(),
|
||||
markers: markers.cloned(),
|
||||
|
|
|
@ -40,11 +40,11 @@ impl AllowedYanks {
|
|||
}
|
||||
|
||||
// Allow yanks for any packages that are already pinned in the lockfile.
|
||||
for preference in &manifest.preferences {
|
||||
for (name, version) in manifest.preferences.iter() {
|
||||
allowed_yanks
|
||||
.entry(preference.name().clone())
|
||||
.entry(name.clone())
|
||||
.or_default()
|
||||
.insert(preference.version().clone());
|
||||
.insert(version.clone());
|
||||
}
|
||||
|
||||
Self(allowed_yanks)
|
||||
|
|
|
@ -35,7 +35,7 @@ use uv_requirements::{
|
|||
};
|
||||
use uv_resolver::{
|
||||
DependencyMode, Exclusions, FlatIndex, InMemoryIndex, Manifest, Options, Preference,
|
||||
PythonRequirement, ResolutionGraph, Resolver,
|
||||
Preferences, PythonRequirement, ResolutionGraph, Resolver,
|
||||
};
|
||||
use uv_toolchain::{Interpreter, PythonEnvironment};
|
||||
use uv_types::{HashStrategy, InFlight, InstalledPackagesProvider};
|
||||
|
@ -184,6 +184,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
|
|||
// Collect constraints and overrides.
|
||||
let constraints = Constraints::from_requirements(constraints);
|
||||
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 =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue