From 00a749a3a641799c1732d1a2a6ec81c18d63eaa8 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 22 Jun 2023 00:18:31 -0700 Subject: [PATCH] lib/system: move toLosslessStringMaybe into lib/tests toLosslessStringMaybe is not used by anything other than lib/tests, so it can be private to that file. I don't think this function was terribly well thought-through. If people start using it, we will become permanently dependent on the ability to test platforms for equality. It also makes the elaboration process more fragile, because it encourages code outside of nixpkgs to become sensitive to the minute details of how elaboration happens. --- lib/systems/default.nix | 15 --------------- lib/tests/systems.nix | 20 ++++++++++++++++++-- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/systems/default.nix b/lib/systems/default.nix index eaf070ca7111..78ccd50ba79a 100644 --- a/lib/systems/default.nix +++ b/lib/systems/default.nix @@ -27,21 +27,6 @@ rec { let removeFunctions = a: lib.filterAttrs (_: v: !builtins.isFunction v) a; in a: b: removeFunctions a == removeFunctions b; - /* - Try to convert an elaborated system back to a simple string. If not possible, - return null. So we have the property: - - sys: _valid_ sys -> - sys == elaborate (toLosslessStringMaybe sys) - - NOTE: This property is not guaranteed when `sys` was elaborated by a different - version of Nixpkgs. - */ - toLosslessStringMaybe = sys: - if lib.isString sys then sys - else if equals sys (elaborate sys.system) then sys.system - else null; - /* List of all Nix system doubles the nixpkgs flake will expose the package set for. All systems listed here must be supported by nixpkgs as `localSystem`. diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix index 862496313e90..fe4657c9dee6 100644 --- a/lib/tests/systems.nix +++ b/lib/tests/systems.nix @@ -9,6 +9,22 @@ let expr = lib.sort lib.lessThan x; expected = lib.sort lib.lessThan y; }; + + /* + Try to convert an elaborated system back to a simple string. If not possible, + return null. So we have the property: + + sys: _valid_ sys -> + sys == elaborate (toLosslessStringMaybe sys) + + NOTE: This property is not guaranteed when `sys` was elaborated by a different + version of Nixpkgs. + */ + toLosslessStringMaybe = sys: + if lib.isString sys then sys + else if lib.systems.equals sys (lib.systems.elaborate sys.system) then sys.system + else null; + in lib.runTests ( # We assert that the new algorithmic way of generating these lists matches the @@ -55,11 +71,11 @@ lib.runTests ( }; test_toLosslessStringMaybe_example_x86_64-linux = { - expr = lib.systems.toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux"); + expr = toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux"); expected = "x86_64-linux"; }; test_toLosslessStringMaybe_fail = { - expr = lib.systems.toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux" // { something = "extra"; }); + expr = toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux" // { something = "extra"; }); expected = null; }; }