mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 13:25:00 +00:00
Use a single mutable preferences for forks (#4690)
## Summary Avoids a quadratic loop. See: https://github.com/astral-sh/uv/pull/4662.
This commit is contained in:
parent
1557ad1b3c
commit
977a5c8835
1 changed files with 10 additions and 16 deletions
|
@ -324,8 +324,8 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
priorities: PubGrubPriorities::default(),
|
priorities: PubGrubPriorities::default(),
|
||||||
added_dependencies: FxHashMap::default(),
|
added_dependencies: FxHashMap::default(),
|
||||||
markers: MarkerTree::And(vec![]),
|
markers: MarkerTree::And(vec![]),
|
||||||
preferences: self.preferences.clone(),
|
|
||||||
};
|
};
|
||||||
|
let mut preferences = self.preferences.clone();
|
||||||
let mut forked_states = vec![state];
|
let mut forked_states = vec![state];
|
||||||
let mut resolutions = vec![];
|
let mut resolutions = vec![];
|
||||||
|
|
||||||
|
@ -379,17 +379,13 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
let resolution = state.into_resolution();
|
let resolution = state.into_resolution();
|
||||||
|
|
||||||
// Walk over the selected versions, and mark them as preferences.
|
// Walk over the selected versions, and mark them as preferences.
|
||||||
for state in &mut forked_states {
|
|
||||||
for (package, versions) in &resolution.packages {
|
for (package, versions) in &resolution.packages {
|
||||||
if let Entry::Vacant(entry) =
|
if let Entry::Vacant(entry) = preferences.entry(package.name.clone()) {
|
||||||
state.preferences.entry(package.name.clone())
|
|
||||||
{
|
|
||||||
if let Some(version) = versions.iter().next() {
|
if let Some(version) = versions.iter().next() {
|
||||||
entry.insert(version.clone().into());
|
entry.insert(version.clone().into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
resolutions.push(resolution);
|
resolutions.push(resolution);
|
||||||
continue 'FORK;
|
continue 'FORK;
|
||||||
|
@ -428,7 +424,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
&state.next,
|
&state.next,
|
||||||
term_intersection.unwrap_positive(),
|
term_intersection.unwrap_positive(),
|
||||||
&mut state.pins,
|
&mut state.pins,
|
||||||
&state.preferences,
|
&preferences,
|
||||||
&state.fork_urls,
|
&state.fork_urls,
|
||||||
visited,
|
visited,
|
||||||
&request_sink,
|
&request_sink,
|
||||||
|
@ -730,7 +726,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
package: &PubGrubPackage,
|
package: &PubGrubPackage,
|
||||||
range: &Range<Version>,
|
range: &Range<Version>,
|
||||||
pins: &mut FilePins,
|
pins: &mut FilePins,
|
||||||
fork_preferences: &Preferences,
|
preferences: &Preferences,
|
||||||
fork_urls: &ForkUrls,
|
fork_urls: &ForkUrls,
|
||||||
visited: &mut FxHashSet<PackageName>,
|
visited: &mut FxHashSet<PackageName>,
|
||||||
request_sink: &Sender<Request>,
|
request_sink: &Sender<Request>,
|
||||||
|
@ -758,7 +754,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
name,
|
name,
|
||||||
range,
|
range,
|
||||||
package,
|
package,
|
||||||
fork_preferences,
|
preferences,
|
||||||
pins,
|
pins,
|
||||||
visited,
|
visited,
|
||||||
request_sink,
|
request_sink,
|
||||||
|
@ -869,7 +865,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
name: &PackageName,
|
name: &PackageName,
|
||||||
range: &Range<Version>,
|
range: &Range<Version>,
|
||||||
package: &PubGrubPackage,
|
package: &PubGrubPackage,
|
||||||
fork_preferences: &Preferences,
|
preferences: &Preferences,
|
||||||
pins: &mut FilePins,
|
pins: &mut FilePins,
|
||||||
visited: &mut FxHashSet<PackageName>,
|
visited: &mut FxHashSet<PackageName>,
|
||||||
request_sink: &Sender<Request>,
|
request_sink: &Sender<Request>,
|
||||||
|
@ -908,7 +904,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
||||||
name,
|
name,
|
||||||
range,
|
range,
|
||||||
version_maps,
|
version_maps,
|
||||||
fork_preferences,
|
preferences,
|
||||||
&self.installed_packages,
|
&self.installed_packages,
|
||||||
&self.exclusions,
|
&self.exclusions,
|
||||||
) else {
|
) else {
|
||||||
|
@ -1728,8 +1724,6 @@ struct SolveState {
|
||||||
/// that the marker expression that provoked the fork is true), then that
|
/// that the marker expression that provoked the fork is true), then that
|
||||||
/// dependency is completely ignored.
|
/// dependency is completely ignored.
|
||||||
markers: MarkerTree,
|
markers: MarkerTree,
|
||||||
/// The preferences to respect for the fork.
|
|
||||||
preferences: Preferences,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SolveState {
|
impl SolveState {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue