Skip to content

Commit 846ad27

Browse files
committed
lock1: optimise out more marker parsing
By aggregating all toplevel markers and skipping duplicates.
1 parent e06c09a commit 846ad27

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

lib/lock1.nix

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ let
3535
filterAttrs
3636
nameValuePair
3737
pathExists
38+
unique
3839
;
3940

4041
in
@@ -302,25 +303,30 @@ fix (self: {
302303
revision ? 0,
303304
}:
304305
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+
{
306320
inherit version conflicts;
307321
requires-python = pep440.parseVersionConds requires-python;
308322
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;
321327
options = parseOptions options;
322328
inherit revision;
323-
});
329+
};
324330

325331
parseManifest =
326332
{
@@ -406,17 +412,10 @@ fix (self: {
406412
};
407413

408414
in
409-
{
410-
resolution-markers ? { },
411-
supported-markers ? { },
412-
required-markers ? { },
413-
}:
415+
topLevelMarkers:
414416
let
415417
# 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);
420419
inherit (pep440) parseVersion;
421420

422421
parseDependency =

0 commit comments

Comments
 (0)