refactor(registry): compose stable uid validation
This commit is contained in:
@@ -1,28 +1,19 @@
|
|||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
let
|
let
|
||||||
inherit (lib)
|
inherit (lib)
|
||||||
foldl'
|
filterAttrs
|
||||||
groupBy
|
groupBy
|
||||||
|
mapAttrs
|
||||||
unique
|
unique
|
||||||
;
|
;
|
||||||
|
|
||||||
|
serviceNamesByUid = entries:
|
||||||
|
mapAttrs (_uid: uidEntries: unique (map (entry: entry.entry) uidEntries)) (
|
||||||
|
groupBy (entry: toString entry.value) entries
|
||||||
|
);
|
||||||
|
|
||||||
duplicateUids = entries:
|
duplicateUids = entries:
|
||||||
let
|
filterAttrs (_uid: serviceNames: builtins.length serviceNames > 1) (serviceNamesByUid entries);
|
||||||
byUid = groupBy (entry: toString entry.value) entries;
|
|
||||||
in
|
|
||||||
foldl' (
|
|
||||||
acc: uid:
|
|
||||||
let
|
|
||||||
serviceNames = unique (map (entry: entry.entry) byUid.${uid});
|
|
||||||
in
|
|
||||||
if builtins.length serviceNames > 1 then
|
|
||||||
acc ++ [ {
|
|
||||||
uid = lib.toInt uid;
|
|
||||||
inherit serviceNames;
|
|
||||||
} ]
|
|
||||||
else
|
|
||||||
acc
|
|
||||||
) [ ] (builtins.attrNames byUid);
|
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@@ -37,7 +28,7 @@ in
|
|||||||
in
|
in
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
assertion = uidConflicts == [ ];
|
assertion = uidConflicts == { };
|
||||||
message = "Stable UID allocations must be unique.";
|
message = "Stable UID allocations must be unique.";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user