mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-26 23:54:01 +00:00
58 lines
2.2 KiB
Nix
58 lines
2.2 KiB
Nix
|
let
|
||
|
lib = import ../../lib;
|
||
|
inherit (lib)
|
||
|
add attrNames elemAt foldl' genList length replaceStrings sort toLower trace;
|
||
|
|
||
|
maintainers = import ../maintainer-list.nix;
|
||
|
simplify = replaceStrings [ "-" "_" ] [ "" "" ];
|
||
|
compare = a: b: simplify (toLower a) < simplify (toLower b);
|
||
|
namesSorted =
|
||
|
sort
|
||
|
(a: b: a.key < b.key)
|
||
|
(map
|
||
|
(n: let pos = builtins.unsafeGetAttrPos n maintainers;
|
||
|
in assert pos == null -> throw "maintainers entry ${n} is malformed";
|
||
|
{ name = n; line = pos.line; key = toLower (simplify n); })
|
||
|
(attrNames maintainers));
|
||
|
before = { name, line, key }:
|
||
|
foldl'
|
||
|
(acc: n: if n.key < key && (acc == null || n.key > acc.key) then n else acc)
|
||
|
null
|
||
|
namesSorted;
|
||
|
errors = foldl' add 0
|
||
|
(map
|
||
|
(i: let a = elemAt namesSorted i;
|
||
|
b = elemAt namesSorted (i + 1);
|
||
|
lim = let t = before a; in if t == null then "the initial {" else t.name;
|
||
|
in if a.line >= b.line
|
||
|
then trace
|
||
|
("maintainer ${a.name} (line ${toString a.line}) should be listed "
|
||
|
+ "after ${lim}, not after ${b.name} (line ${toString b.line})")
|
||
|
1
|
||
|
else 0)
|
||
|
(genList (i: i) (length namesSorted - 1)));
|
||
|
in
|
||
|
assert errors == 0; "all good!"
|
||
|
|
||
|
# generate edit commands to sort the list.
|
||
|
# may everything following the last current entry (closing } ff) in the wrong place
|
||
|
# with lib;
|
||
|
# concatStringsSep
|
||
|
# "\n"
|
||
|
# (let first = foldl' (acc: n: if n.line < acc then n.line else acc) 999999999 namesSorted;
|
||
|
# commands = map
|
||
|
# (i: let e = elemAt namesSorted i;
|
||
|
# begin = foldl'
|
||
|
# (acc: n: if n.line < e.line && n.line > acc then n.line else acc)
|
||
|
# 1
|
||
|
# namesSorted;
|
||
|
# end =
|
||
|
# foldl' (acc: n: if n.line > e.line && n.line < acc then n.line else acc)
|
||
|
# 999999999
|
||
|
# namesSorted;
|
||
|
# in "${toString e.line},${toString (end - 1)} p")
|
||
|
# (genList (i: i) (length namesSorted));
|
||
|
# in map
|
||
|
# (c: "sed -ne '${c}' maintainers/maintainer-list.nix")
|
||
|
# ([ "1,${toString (first - 1)} p" ] ++ commands))
|