@@ -1259,7 +1259,9 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
12591259
12601260 requirements
12611261 . iter ( )
1262- . flat_map ( |requirement| PubGrubDependency :: from_requirement ( requirement, None ) )
1262+ . flat_map ( |requirement| {
1263+ PubGrubDependency :: from_requirement ( requirement, None , None )
1264+ } )
12631265 . collect ( )
12641266 }
12651267 PubGrubPackageInner :: Package {
@@ -1445,7 +1447,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
14451447 let mut dependencies: Vec < _ > = requirements
14461448 . iter ( )
14471449 . flat_map ( |requirement| {
1448- PubGrubDependency :: from_requirement ( requirement, Some ( name) )
1450+ PubGrubDependency :: from_requirement ( requirement, dev . as_ref ( ) , Some ( name) )
14491451 } )
14501452 . collect ( ) ;
14511453
@@ -1577,6 +1579,12 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
15771579 . requirements_for_extra ( regular_and_dev_dependencies, extra, env, python_requirement)
15781580 . collect :: < Vec < _ > > ( ) ;
15791581
1582+ // Dependency groups can include the project itself, so no need to flatten recursive
1583+ // dependencies.
1584+ if dev. is_some ( ) {
1585+ return requirements;
1586+ }
1587+
15801588 // Check if there are recursive self inclusions and we need to go into the expensive branch.
15811589 if !requirements
15821590 . iter ( )
@@ -2416,7 +2424,9 @@ impl ForkState {
24162424 dev : ref dependency_dev,
24172425 ..
24182426 } => {
2419- if self_name. is_some_and ( |self_name| self_name == dependency_name) {
2427+ if self_dev. is_none ( )
2428+ && self_name. is_some_and ( |self_name| self_name == dependency_name)
2429+ {
24202430 continue ;
24212431 }
24222432 let to_url = self . fork_urls . get ( dependency_name) ;
@@ -2444,7 +2454,9 @@ impl ForkState {
24442454 marker : ref dependency_marker,
24452455 ..
24462456 } => {
2447- if self_name. is_some_and ( |self_name| self_name == dependency_name) {
2457+ if self_dev. is_none ( )
2458+ && self_name. is_some_and ( |self_name| self_name == dependency_name)
2459+ {
24482460 continue ;
24492461 }
24502462 let to_url = self . fork_urls . get ( dependency_name) ;
@@ -2473,7 +2485,9 @@ impl ForkState {
24732485 marker : ref dependency_marker,
24742486 ..
24752487 } => {
2476- if self_name. is_some_and ( |self_name| self_name == dependency_name) {
2488+ if self_dev. is_none ( )
2489+ && self_name. is_some_and ( |self_name| self_name == dependency_name)
2490+ {
24772491 continue ;
24782492 }
24792493 let to_url = self . fork_urls . get ( dependency_name) ;
@@ -2502,7 +2516,9 @@ impl ForkState {
25022516 marker : ref dependency_marker,
25032517 ..
25042518 } => {
2505- if self_name. is_some_and ( |self_name| self_name == dependency_name) {
2519+ if self_dev. is_none ( )
2520+ && self_name. is_some_and ( |self_name| self_name == dependency_name)
2521+ {
25062522 continue ;
25072523 }
25082524 let to_url = self . fork_urls . get ( dependency_name) ;
0 commit comments