@@ -495,9 +495,8 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
495
495
. insert ( version. clone ( ) )
496
496
{
497
497
// Retrieve that package dependencies.
498
- let package = state. next . clone ( ) ;
499
498
let forked_deps = self . get_dependencies_forking (
500
- & package ,
499
+ & state . next ,
501
500
& version,
502
501
& state. markers ,
503
502
& mut state. priorities ,
@@ -508,40 +507,18 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
508
507
state
509
508
. pubgrub
510
509
. add_incompatibility ( Incompatibility :: custom_version (
511
- package . clone ( ) ,
510
+ state . next . clone ( ) ,
512
511
version. clone ( ) ,
513
512
UnavailableReason :: Version ( reason) ,
514
513
) ) ;
515
514
forked_states. push ( state) ;
516
515
}
517
- ForkedDependencies :: Unforked ( constraints) => {
518
- if constraints
519
- . iter ( )
520
- . any ( |( dependency, _) | dependency == & package)
521
- {
522
- if enabled ! ( Level :: DEBUG ) {
523
- prefetcher. log_tried_versions ( ) ;
524
- }
525
- return Err ( PubGrubError :: SelfDependency {
526
- package : package. clone ( ) ,
527
- version : version. clone ( ) ,
528
- }
529
- . into ( ) ) ;
530
- }
531
-
532
- // Add that package and version if the dependencies are not problematic.
533
- let dep_incompats =
534
- state. pubgrub . add_incompatibility_from_dependencies (
535
- package. clone ( ) ,
536
- version. clone ( ) ,
537
- constraints,
538
- ) ;
539
- state. pubgrub . partial_solution . add_version (
540
- package. clone ( ) ,
541
- version. clone ( ) ,
542
- dep_incompats,
543
- & state. pubgrub . incompatibility_store ,
544
- ) ;
516
+ ForkedDependencies :: Unforked ( dependencies) => {
517
+ state. add_package_version_dependencies (
518
+ & version,
519
+ dependencies,
520
+ & prefetcher,
521
+ ) ?;
545
522
forked_states. push ( state) ;
546
523
}
547
524
ForkedDependencies :: Forked {
@@ -565,41 +542,18 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
565
542
let mut cur_state = Some ( state) ;
566
543
let forks_len = forks. len ( ) ;
567
544
for ( i, fork) in forks. into_iter ( ) . enumerate ( ) {
568
- if fork
569
- . dependencies
570
- . iter ( )
571
- . any ( |( dependency, _) | dependency == & package)
572
- {
573
- if enabled ! ( Level :: DEBUG ) {
574
- prefetcher. log_tried_versions ( ) ;
575
- }
576
- return Err ( PubGrubError :: SelfDependency {
577
- package : package. clone ( ) ,
578
- version : version. clone ( ) ,
579
- }
580
- . into ( ) ) ;
581
- }
582
-
583
545
let is_last = i == forks_len - 1 ;
584
546
let mut forked_state = cur_state. take ( ) . unwrap ( ) ;
585
547
if !is_last {
586
548
cur_state = Some ( forked_state. clone ( ) ) ;
587
549
}
588
550
forked_state. markers . and ( fork. markers ) ;
589
551
590
- // Add that package and version if the dependencies are not problematic.
591
- let dep_incompats =
592
- forked_state. pubgrub . add_incompatibility_from_dependencies (
593
- package. clone ( ) ,
594
- version. clone ( ) ,
595
- fork. dependencies ,
596
- ) ;
597
- forked_state. pubgrub . partial_solution . add_version (
598
- package. clone ( ) ,
599
- version. clone ( ) ,
600
- dep_incompats,
601
- & forked_state. pubgrub . incompatibility_store ,
602
- ) ;
552
+ forked_state. add_package_version_dependencies (
553
+ & version,
554
+ fork. dependencies ,
555
+ & prefetcher,
556
+ ) ?;
603
557
forked_states. push ( forked_state) ;
604
558
}
605
559
}
@@ -1573,6 +1527,34 @@ struct SolveState {
1573
1527
}
1574
1528
1575
1529
impl SolveState {
1530
+ /// Add the dependencies for the selected version of the current package.
1531
+ fn add_package_version_dependencies (
1532
+ & mut self ,
1533
+ version : & Version ,
1534
+ dependencies : Vec < ( PubGrubPackage , Range < Version > ) > ,
1535
+ prefetcher : & BatchPrefetcher ,
1536
+ ) -> Result < ( ) , ResolveError > {
1537
+ if dependencies
1538
+ . iter ( )
1539
+ . any ( |( dependency, _) | dependency == & self . next )
1540
+ {
1541
+ if enabled ! ( Level :: DEBUG ) {
1542
+ prefetcher. log_tried_versions ( ) ;
1543
+ }
1544
+ return Err ( PubGrubError :: SelfDependency {
1545
+ package : self . next . clone ( ) ,
1546
+ version : version. clone ( ) ,
1547
+ }
1548
+ . into ( ) ) ;
1549
+ }
1550
+ self . pubgrub . add_package_version_dependencies (
1551
+ self . next . clone ( ) ,
1552
+ version. clone ( ) ,
1553
+ dependencies,
1554
+ ) ;
1555
+ Ok ( ( ) )
1556
+ }
1557
+
1576
1558
fn into_resolution ( self ) -> Resolution {
1577
1559
let solution = self . pubgrub . partial_solution . extract_solution ( ) ;
1578
1560
let mut dependencies: FxHashMap <
0 commit comments