diff options
author | pennae <github@quasiparticle.net> | 2023-02-25 20:11:14 +0100 |
---|---|---|
committer | pennae <github@quasiparticle.net> | 2023-03-15 11:07:54 +0100 |
commit | 4a694fc50007076566a204d6ea623fd5fc7ddbfa (patch) | |
tree | 371cbf157bea960e968bb7ff1e61969f55d636db /maintainers/scripts | |
parent | 91e49d60b22b4afdac6f3979e296c17cdc01bb12 (diff) |
maintainers: add script and workflows to check sortedness
the script can output a list of sed commands to create the order it expects to find. this was mainly useful for initially sorting the list, but we'll keep it here for later reference. Co-authored-by: Jörg Thalheim <Mic92@users.noreply.github.com>
Diffstat (limited to 'maintainers/scripts')
-rw-r--r-- | maintainers/scripts/check-maintainers-sorted.nix | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/maintainers/scripts/check-maintainers-sorted.nix b/maintainers/scripts/check-maintainers-sorted.nix new file mode 100644 index 0000000000000..3de4e07550c42 --- /dev/null +++ b/maintainers/scripts/check-maintainers-sorted.nix @@ -0,0 +1,57 @@ +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)) |