mirror of
https://github.com/nmattia/niv.git
synced 2024-11-07 22:36:53 +03:00
Add NIV_OVERRIDE_{...}
This updates the sources.nix to replace the `outPath` field of package `foo` with the content of envionment variable `NIV_OVERRIDE_foo`. In the environment variable name, all characters outside of `[a-zA-Z0-9_]` are escaped to `_`.
This commit is contained in:
parent
24eabfbfaa
commit
38a536e59e
@ -197,6 +197,7 @@ rec
|
|||||||
|
|
||||||
tests-github = pkgs.callPackage ./tests/github { inherit niv; };
|
tests-github = pkgs.callPackage ./tests/github { inherit niv; };
|
||||||
tests-git = pkgs.callPackage ./tests/git { inherit niv; };
|
tests-git = pkgs.callPackage ./tests/git { inherit niv; };
|
||||||
|
tests-eval = pkgs.callPackage ./tests/eval {};
|
||||||
|
|
||||||
fmt-check =
|
fmt-check =
|
||||||
pkgs.stdenv.mkDerivation
|
pkgs.stdenv.mkDerivation
|
||||||
|
@ -73,6 +73,15 @@ let
|
|||||||
else
|
else
|
||||||
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}";
|
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}";
|
||||||
|
|
||||||
|
# If the environment variable NIV_OVERRIDE_${name} is set, then use
|
||||||
|
# the path directly as opposed to the fetched source.
|
||||||
|
replace = name: drv:
|
||||||
|
let
|
||||||
|
saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name;
|
||||||
|
ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}";
|
||||||
|
in
|
||||||
|
if ersatz == "" then drv else ersatz;
|
||||||
|
|
||||||
# Ports of functions for older nix versions
|
# Ports of functions for older nix versions
|
||||||
|
|
||||||
# a Nix version of mapAttrs if the built-in doesn't exist
|
# a Nix version of mapAttrs if the built-in doesn't exist
|
||||||
@ -119,7 +128,7 @@ let
|
|||||||
then abort
|
then abort
|
||||||
"The values in sources.json should not have an 'outPath' attribute"
|
"The values in sources.json should not have an 'outPath' attribute"
|
||||||
else
|
else
|
||||||
spec // { outPath = fetch config.pkgs name spec; }
|
spec // { outPath = replace name (fetch config.pkgs name spec); }
|
||||||
) config.sources;
|
) config.sources;
|
||||||
|
|
||||||
# The "config" used by the fetchers
|
# The "config" used by the fetchers
|
||||||
@ -134,5 +143,6 @@ let
|
|||||||
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers
|
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); }
|
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); }
|
||||||
|
@ -160,6 +160,8 @@ data SourcesNixVersion
|
|||||||
| -- prettify derivation name
|
| -- prettify derivation name
|
||||||
-- add 'local' type of sources
|
-- add 'local' type of sources
|
||||||
V18
|
V18
|
||||||
|
| -- add NIV_OVERRIDE_{name}
|
||||||
|
V19
|
||||||
deriving stock (Bounded, Enum, Eq)
|
deriving stock (Bounded, Enum, Eq)
|
||||||
|
|
||||||
-- | A user friendly version
|
-- | A user friendly version
|
||||||
@ -183,6 +185,7 @@ sourcesVersionToText = \case
|
|||||||
V16 -> "16"
|
V16 -> "16"
|
||||||
V17 -> "17"
|
V17 -> "17"
|
||||||
V18 -> "18"
|
V18 -> "18"
|
||||||
|
V19 -> "19"
|
||||||
|
|
||||||
latestVersionMD5 :: T.Text
|
latestVersionMD5 :: T.Text
|
||||||
latestVersionMD5 = sourcesVersionToMD5 maxBound
|
latestVersionMD5 = sourcesVersionToMD5 maxBound
|
||||||
@ -213,6 +216,7 @@ sourcesVersionToMD5 = \case
|
|||||||
V16 -> "2d93c52cab8e960e767a79af05ca572a"
|
V16 -> "2d93c52cab8e960e767a79af05ca572a"
|
||||||
V17 -> "149b8907f7b08dc1c28164dfa55c7fad"
|
V17 -> "149b8907f7b08dc1c28164dfa55c7fad"
|
||||||
V18 -> "bc5e6aefcaa6f9e0b2155ca4f44e5a33"
|
V18 -> "bc5e6aefcaa6f9e0b2155ca4f44e5a33"
|
||||||
|
V19 -> "543621698065cfc6a4a7985af76df718"
|
||||||
|
|
||||||
-- | The MD5 sum of ./nix/sources.nix
|
-- | The MD5 sum of ./nix/sources.nix
|
||||||
sourcesNixMD5 :: IO T.Text
|
sourcesNixMD5 :: IO T.Text
|
||||||
|
45
tests/eval/default.nix
Normal file
45
tests/eval/default.nix
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {}
|
||||||
|
}:
|
||||||
|
|
||||||
|
pkgs.runCommand "foobar" { nativeBuildInputs = [ pkgs.jq pkgs.nix pkgs.moreutils ]; }
|
||||||
|
''
|
||||||
|
# for nix to run smoothly in multi-user install
|
||||||
|
# https://github.com/NixOS/nix/issues/3258
|
||||||
|
# https://github.com/cachix/install-nix-action/issues/16
|
||||||
|
export NIX_STATE_DIR="$TMPDIR"
|
||||||
|
export NIX_LOG_DIR="$TMPDIR"
|
||||||
|
|
||||||
|
cp ${ ../../nix/sources.nix} sources.nix
|
||||||
|
echo '{}' > sources.json
|
||||||
|
|
||||||
|
update_sources() {
|
||||||
|
cat sources.json | jq -cMe "$1" | sponge sources.json
|
||||||
|
}
|
||||||
|
|
||||||
|
update_sources '.foo = { type: "tarball", url: "foo", sha256: "whocares" }'
|
||||||
|
update_sources '."ba-r" = { type: "tarball", url: "foo", sha256: "whocares" }'
|
||||||
|
update_sources '."ba z" = { type: "tarball", url: "foo", sha256: "whocares" }'
|
||||||
|
|
||||||
|
eval_outPath() {
|
||||||
|
nix eval --raw '(let sources = import ./sources.nix; in sources.'"$1"'.outPath)'
|
||||||
|
}
|
||||||
|
|
||||||
|
eq() {
|
||||||
|
if ! [ "$1" == "$2" ]; then
|
||||||
|
echo "expected"
|
||||||
|
echo " '$1' == '$2'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
res="$(NIV_OVERRIDE_foo="hello" eval_outPath "foo")"
|
||||||
|
eq "$res" "hello"
|
||||||
|
|
||||||
|
res="$(NIV_OVERRIDE_ba_r="hello" eval_outPath "ba-r")"
|
||||||
|
eq "$res" "hello"
|
||||||
|
|
||||||
|
res="$(NIV_OVERRIDE_ba_z="hello" eval_outPath '"ba z"')"
|
||||||
|
eq "$res" "hello"
|
||||||
|
|
||||||
|
touch "$out"
|
||||||
|
''
|
Loading…
Reference in New Issue
Block a user