1
- use either:: Either ;
2
1
use itertools:: Itertools ;
3
2
use petgraph:: graph:: NodeIndex ;
4
3
use petgraph:: visit:: EdgeRef ;
@@ -25,14 +24,14 @@ use crate::{
25
24
ResolutionMode ,
26
25
} ;
27
26
use uv_cache_key:: RepositoryUrl ;
28
- use uv_configuration:: { BuildOptions , DevGroupsManifest , ExtrasSpecification , InstallOptions } ;
27
+ use uv_configuration:: BuildOptions ;
29
28
use uv_distribution:: DistributionDatabase ;
30
29
use uv_distribution_filename:: { DistExtension , ExtensionError , SourceDistExtension , WheelFilename } ;
31
30
use uv_distribution_types:: {
32
31
BuiltDist , DependencyMetadata , DirectUrlBuiltDist , DirectUrlSourceDist , DirectorySourceDist ,
33
32
Dist , DistributionMetadata , FileLocation , GitSourceDist , IndexLocations , IndexUrl , Name ,
34
33
PathBuiltDist , PathSourceDist , RegistryBuiltDist , RegistryBuiltWheel , RegistrySourceDist ,
35
- RemoteSource , Resolution , ResolvedDist , StaticMetadata , ToUrlError , UrlString ,
34
+ RemoteSource , ResolvedDist , StaticMetadata , ToUrlError , UrlString ,
36
35
} ;
37
36
use uv_fs:: { relative_to, PortablePath , PortablePathBuf } ;
38
37
use uv_git:: { GitReference , GitSha , RepositoryReference , ResolvedRepositoryReference } ;
@@ -42,7 +41,6 @@ use uv_pep508::{split_scheme, MarkerEnvironment, MarkerTree, VerbatimUrl, Verbat
42
41
use uv_platform_tags:: { TagCompatibility , TagPriority , Tags } ;
43
42
use uv_pypi_types:: {
44
43
redact_credentials, HashDigest , ParsedArchiveUrl , ParsedGitUrl , Requirement , RequirementSource ,
45
- ResolverMarkerEnvironment ,
46
44
} ;
47
45
use uv_types:: { BuildContext , HashStrategy } ;
48
46
use uv_workspace:: dependency_groups:: DependencyGroupError ;
@@ -587,139 +585,6 @@ impl Lock {
587
585
self . fork_markers . as_slice ( )
588
586
}
589
587
590
- /// Convert the [`Lock`] to a [`Resolution`] using the given marker environment, tags, and root.
591
- pub fn to_resolution (
592
- & self ,
593
- target : InstallTarget < ' _ > ,
594
- marker_env : & ResolverMarkerEnvironment ,
595
- tags : & Tags ,
596
- extras : & ExtrasSpecification ,
597
- dev : & DevGroupsManifest ,
598
- build_options : & BuildOptions ,
599
- install_options : & InstallOptions ,
600
- ) -> Result < Resolution , LockError > {
601
- let mut queue: VecDeque < ( & Package , Option < & ExtraName > ) > = VecDeque :: new ( ) ;
602
- let mut seen = FxHashSet :: default ( ) ;
603
-
604
- // Add the workspace packages to the queue.
605
- for root_name in target. packages ( ) {
606
- let root = self
607
- . find_by_name ( root_name)
608
- . map_err ( |_| LockErrorKind :: MultipleRootPackages {
609
- name : root_name. clone ( ) ,
610
- } ) ?
611
- . ok_or_else ( || LockErrorKind :: MissingRootPackage {
612
- name : root_name. clone ( ) ,
613
- } ) ?;
614
-
615
- if dev. prod ( ) {
616
- // Add the base package.
617
- queue. push_back ( ( root, None ) ) ;
618
-
619
- // Add any extras.
620
- match extras {
621
- ExtrasSpecification :: None => { }
622
- ExtrasSpecification :: All => {
623
- for extra in root. optional_dependencies . keys ( ) {
624
- queue. push_back ( ( root, Some ( extra) ) ) ;
625
- }
626
- }
627
- ExtrasSpecification :: Some ( extras) => {
628
- for extra in extras {
629
- queue. push_back ( ( root, Some ( extra) ) ) ;
630
- }
631
- }
632
- }
633
- }
634
-
635
- // Add any dev dependencies.
636
- for group in dev. iter ( ) {
637
- for dep in root. dependency_groups . get ( group) . into_iter ( ) . flatten ( ) {
638
- if dep. complexified_marker . evaluate ( marker_env, & [ ] ) {
639
- let dep_dist = self . find_by_id ( & dep. package_id ) ;
640
- if seen. insert ( ( & dep. package_id , None ) ) {
641
- queue. push_back ( ( dep_dist, None ) ) ;
642
- }
643
- for extra in & dep. extra {
644
- if seen. insert ( ( & dep. package_id , Some ( extra) ) ) {
645
- queue. push_back ( ( dep_dist, Some ( extra) ) ) ;
646
- }
647
- }
648
- }
649
- }
650
- }
651
- }
652
-
653
- // Add any dependency groups that are exclusive to the workspace root (e.g., dev
654
- // dependencies in (legacy) non-project workspace roots).
655
- let groups = target
656
- . groups ( )
657
- . map_err ( |err| LockErrorKind :: DependencyGroup { err } ) ?;
658
- for group in dev. iter ( ) {
659
- for dependency in groups. get ( group) . into_iter ( ) . flatten ( ) {
660
- if dependency. marker . evaluate ( marker_env, & [ ] ) {
661
- let root_name = & dependency. name ;
662
- let root = self
663
- . find_by_markers ( root_name, marker_env)
664
- . map_err ( |_| LockErrorKind :: MultipleRootPackages {
665
- name : root_name. clone ( ) ,
666
- } ) ?
667
- . ok_or_else ( || LockErrorKind :: MissingRootPackage {
668
- name : root_name. clone ( ) ,
669
- } ) ?;
670
-
671
- // Add the base package.
672
- queue. push_back ( ( root, None ) ) ;
673
-
674
- // Add any extras.
675
- for extra in & dependency. extras {
676
- queue. push_back ( ( root, Some ( extra) ) ) ;
677
- }
678
- }
679
- }
680
- }
681
-
682
- let mut map = BTreeMap :: default ( ) ;
683
- let mut hashes = BTreeMap :: default ( ) ;
684
- while let Some ( ( dist, extra) ) = queue. pop_front ( ) {
685
- let deps = if let Some ( extra) = extra {
686
- Either :: Left ( dist. optional_dependencies . get ( extra) . into_iter ( ) . flatten ( ) )
687
- } else {
688
- Either :: Right ( dist. dependencies . iter ( ) )
689
- } ;
690
- for dep in deps {
691
- if dep. complexified_marker . evaluate ( marker_env, & [ ] ) {
692
- let dep_dist = self . find_by_id ( & dep. package_id ) ;
693
- if seen. insert ( ( & dep. package_id , None ) ) {
694
- queue. push_back ( ( dep_dist, None ) ) ;
695
- }
696
- for extra in & dep. extra {
697
- if seen. insert ( ( & dep. package_id , Some ( extra) ) ) {
698
- queue. push_back ( ( dep_dist, Some ( extra) ) ) ;
699
- }
700
- }
701
- }
702
- }
703
- if install_options. include_package (
704
- & dist. id . name ,
705
- target. project_name ( ) ,
706
- & self . manifest . members ,
707
- ) {
708
- map. insert (
709
- dist. id . name . clone ( ) ,
710
- ResolvedDist :: Installable ( dist. to_dist (
711
- target. workspace ( ) . install_path ( ) ,
712
- TagPolicy :: Required ( tags) ,
713
- build_options,
714
- ) ?) ,
715
- ) ;
716
- hashes. insert ( dist. id . name . clone ( ) , dist. hashes ( ) ) ;
717
- }
718
- }
719
- let diagnostics = vec ! [ ] ;
720
- Ok ( Resolution :: new ( map, hashes, diagnostics) )
721
- }
722
-
723
588
/// Returns the TOML representation of this lockfile.
724
589
pub fn to_toml ( & self ) -> anyhow:: Result < String > {
725
590
// We construct a TOML document manually instead of going through Serde to enable
0 commit comments