|
35 | 35 | filterAttrs |
36 | 36 | nameValuePair |
37 | 37 | pathExists |
| 38 | + unique |
38 | 39 | ; |
39 | 40 |
|
40 | 41 | in |
@@ -302,25 +303,30 @@ fix (self: { |
302 | 303 | revision ? 0, |
303 | 304 | }: |
304 | 305 | assert version == 1; |
305 | | - fix (toplevel: { |
| 306 | + let |
| 307 | + # Aggregate all lists of top level markers into a single top-level marker attrset |
| 308 | + # |
| 309 | + # This is so that we only have to parse a marker exactly once even if the marker is repeated |
| 310 | + # across marker lists. |
| 311 | + topLevelMarkers = listToAttrs ( |
| 312 | + map (markers: nameValuePair markers (parseMarkers markers)) ( |
| 313 | + unique (resolution-markers ++ supported-markers ++ required-markers) |
| 314 | + ) |
| 315 | + ); |
| 316 | + filterMarkers = list: filterAttrs (markers: _: elem markers list) topLevelMarkers; |
| 317 | + |
| 318 | + in |
| 319 | + { |
306 | 320 | inherit version conflicts; |
307 | 321 | requires-python = pep440.parseVersionConds requires-python; |
308 | 322 | manifest = self.parseManifest manifest; |
309 | | - package = map (self.parsePackage { |
310 | | - inherit (toplevel) resolution-markers supported-markers; |
311 | | - }) package; |
312 | | - resolution-markers = listToAttrs ( |
313 | | - map (markers: nameValuePair markers (parseMarkers markers)) resolution-markers |
314 | | - ); |
315 | | - supported-markers = listToAttrs ( |
316 | | - map (markers: nameValuePair markers (parseMarkers markers)) supported-markers |
317 | | - ); |
318 | | - required-markers = listToAttrs ( |
319 | | - map (markers: nameValuePair markers (parseMarkers markers)) required-markers |
320 | | - ); |
| 323 | + package = map (self.parsePackage topLevelMarkers) package; |
| 324 | + resolution-markers = filterMarkers resolution-markers; |
| 325 | + supported-markers = filterMarkers supported-markers; |
| 326 | + required-markers = filterMarkers required-markers; |
321 | 327 | options = parseOptions options; |
322 | 328 | inherit revision; |
323 | | - }); |
| 329 | + }; |
324 | 330 |
|
325 | 331 | parseManifest = |
326 | 332 | { |
@@ -406,17 +412,10 @@ fix (self: { |
406 | 412 | }; |
407 | 413 |
|
408 | 414 | in |
409 | | - { |
410 | | - resolution-markers ? { }, |
411 | | - supported-markers ? { }, |
412 | | - required-markers ? { }, |
413 | | - }: |
| 415 | + topLevelMarkers: |
414 | 416 | let |
415 | 417 | # Parse marker, but avoid parsing markers already present in toplevel uv.lock marker fields |
416 | | - parseMarker = |
417 | | - marker: |
418 | | - resolution-markers.${marker} or supported-markers.${marker} or required-markers.${marker} |
419 | | - or (parseMarkers marker); |
| 418 | + parseMarker = marker: topLevelMarkers.${marker} or (parseMarkers marker); |
420 | 419 | inherit (pep440) parseVersion; |
421 | 420 |
|
422 | 421 | parseDependency = |
|
0 commit comments