builtins.nixVersion: return fixed fake version

This builtin is only going to cause us problems because we are not Nix,
so let's just falsify being in the 2.18 series, since that is the
closest target that has any meaning.

In future we might want to have a better feature detection mechanism,
for when we actually add stuff to some builtin's attr set argument. But
builtins.nixVersion is just going to be hopelessly broken and it should
be stubbed out.

Fixes https://git.lix.systems/lix-project/lix/issues/144

Change-Id: Id7390b32a29c6147f2977737d81846320de5d67e
This commit is contained in:
Jade Lovelace 2024-03-17 00:24:42 -07:00
parent 11f35afa6f
commit 886a418d23
2 changed files with 7 additions and 16 deletions

View file

@ -4299,25 +4299,16 @@ void EvalState::createBaseEnv()
.impureOnly = true,
});
v.mkString(nixVersion);
v.mkString("2.18.3-lix");
addConstant("__nixVersion", v, {
.type = nString,
.doc = R"(
The version of Nix.
Legacy version of Nix. Always returns "2.18.3-lix" on Lix.
For example, where the command line returns the current Nix version,
```shell-session
$ nix --version
nix (Nix) 2.16.0
```
the Nix language evaluator returns the same value:
```nix-repl
nix-repl> builtins.nixVersion
"2.16.0"
```
To determine if features exist, Nix scripts should instead use direct
means of feature detection, such as checking for existence of
builtins they want to use. Doing so allows for much better compatibility
across implementations.
)",
});

View file

@ -611,7 +611,7 @@ namespace nix {
TEST_F(PrimOpTest, nixVersion) {
auto v = eval("builtins.nixVersion");
ASSERT_THAT(v, IsStringEq(nixVersion));
ASSERT_THAT(v, IsStringEq("2.18.3-lix"));
}
TEST_F(PrimOpTest, currentSystem) {