mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-17 01:24:47 +00:00
writeClosure: init, replacing writeReferencesToFile
Replace writeReferencesToFile with writeClosure. Make writeClosure accept a list of paths instead of a path. Re-implement with JSON-based exportReferencesGraph interface provided by __structuredAttrs = true. Reword the documentation. Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io> Co-authored-by: Robert Hensing <roberth@users.noreply.github.com> Co-authored-by: Someone Serge <sergei.kozlukov@aalto.fi>
This commit is contained in:
parent
9b54fb4524
commit
e9fd4389d2
@ -557,14 +557,18 @@ This creates a derivation with a directory structure like the following:
|
|||||||
|
|
||||||
## `writeReferencesToFile` {#trivial-builder-writeReferencesToFile}
|
## `writeReferencesToFile` {#trivial-builder-writeReferencesToFile}
|
||||||
|
|
||||||
Writes the closure of transitive dependencies to a file.
|
Deprecated. Use [`writeClosure`](#trivial-builder-writeClosure) instead.
|
||||||
|
|
||||||
This produces the equivalent of `nix-store -q --requisites`.
|
## `writeClosure` {#trivial-builder-writeClosure}
|
||||||
|
|
||||||
|
Given a list of [store paths](https://nixos.org/manual/nix/stable/glossary#gloss-store-path) (or string-like expressions coercible to store paths), write their collective [closure](https://nixos.org/manual/nix/stable/glossary#gloss-closure) to a text file.
|
||||||
|
|
||||||
|
The result is equivalent to the output of `nix-store -q --requisites`.
|
||||||
|
|
||||||
For example,
|
For example,
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
writeReferencesToFile (writeScriptBin "hi" ''${hello}/bin/hello'')
|
writeClosure [ (writeScriptBin "hi" ''${hello}/bin/hello'') ]
|
||||||
```
|
```
|
||||||
|
|
||||||
produces an output path `/nix/store/<hash>-runtime-deps` containing
|
produces an output path `/nix/store/<hash>-runtime-deps` containing
|
||||||
|
@ -167,6 +167,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
|||||||
|
|
||||||
- Invidious has changed its default database username from `kemal` to `invidious`. Setups involving an externally provisioned database (i.e. `services.invidious.database.createLocally == false`) should adjust their configuration accordingly. The old `kemal` user will not be removed automatically even when the database is provisioned automatically.(https://github.com/NixOS/nixpkgs/pull/265857)
|
- Invidious has changed its default database username from `kemal` to `invidious`. Setups involving an externally provisioned database (i.e. `services.invidious.database.createLocally == false`) should adjust their configuration accordingly. The old `kemal` user will not be removed automatically even when the database is provisioned automatically.(https://github.com/NixOS/nixpkgs/pull/265857)
|
||||||
|
|
||||||
|
- `writeReferencesToFile` is deprecated in favour of the new trivial build helper `writeClosure`. The latter accepts a list of paths and has an unambiguous name and cleaner implementation.
|
||||||
|
|
||||||
- `inetutils` now has a lower priority to avoid shadowing the commonly used `util-linux`. If one wishes to restore the default priority, simply use `lib.setPrio 5 inetutils` or override with `meta.priority = 5`.
|
- `inetutils` now has a lower priority to avoid shadowing the commonly used `util-linux`. If one wishes to restore the default priority, simply use `lib.setPrio 5 inetutils` or override with `meta.priority = 5`.
|
||||||
|
|
||||||
- `paperless`' `services.paperless.extraConfig` setting has been removed and converted to the freeform type and option named `services.paperless.settings`.
|
- `paperless`' `services.paperless.extraConfig` setting has been removed and converted to the freeform type and option named `services.paperless.settings`.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, stdenv, stdenvNoCC, lndir, runtimeShell, shellcheck-minimal }:
|
{ lib, config, stdenv, stdenvNoCC, jq, lndir, runtimeShell, shellcheck-minimal }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (lib)
|
inherit (lib)
|
||||||
@ -625,18 +625,22 @@ rec {
|
|||||||
|
|
||||||
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
||||||
# See https://nixos.org/manual/nixpkgs/unstable/#trivial-builder-writeReferencesToFile
|
# See https://nixos.org/manual/nixpkgs/unstable/#trivial-builder-writeReferencesToFile
|
||||||
writeReferencesToFile = path: runCommand "runtime-deps"
|
# TODO: Convert to throw after Nixpkgs 24.05 branch-off.
|
||||||
|
writeReferencesToFile = (if config.allowAliases then lib.warn else throw)
|
||||||
|
"writeReferencesToFile is deprecated in favour of writeClosure"
|
||||||
|
(path: writeClosure [ path ]);
|
||||||
|
|
||||||
|
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
||||||
|
# See https://nixos.org/manual/nixpkgs/unstable/#trivial-builder-writeClosure
|
||||||
|
writeClosure = paths: runCommand "runtime-deps"
|
||||||
{
|
{
|
||||||
exportReferencesGraph = [ "graph" path ];
|
# Get the cleaner exportReferencesGraph interface
|
||||||
|
__structuredAttrs = true;
|
||||||
|
exportReferencesGraph.graph = paths;
|
||||||
|
nativeBuildInputs = [ jq ];
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
touch $out
|
jq -r ".graph | map(.path) | sort | .[]" "$NIX_ATTRS_JSON_FILE" > "$out"
|
||||||
while read path; do
|
|
||||||
echo $path >> $out
|
|
||||||
read dummy
|
|
||||||
read nrRefs
|
|
||||||
for ((i = 0; i < nrRefs; i++)); do read ref; done
|
|
||||||
done < graph
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
{ lib
|
||||||
|
, runCommandLocal
|
||||||
|
# Test targets
|
||||||
|
, writeClosure
|
||||||
|
, samples
|
||||||
|
}:
|
||||||
|
runCommandLocal "test-trivial-builders-writeClosure-mixed" {
|
||||||
|
__structuredAttrs = true;
|
||||||
|
references = lib.mapAttrs (n: v: writeClosure [ v ]) samples;
|
||||||
|
allRefs = writeClosure (lib.attrValues samples);
|
||||||
|
inherit samples;
|
||||||
|
meta.maintainers = with lib.maintainers; [
|
||||||
|
ShamrockLee
|
||||||
|
];
|
||||||
|
} ''
|
||||||
|
set -eu -o pipefail
|
||||||
|
echo >&2 Testing mixed closures...
|
||||||
|
echo >&2 Checking all samples "(''${samples[*]})" "$allRefs"
|
||||||
|
diff -U3 \
|
||||||
|
<(sort <"$allRefs") \
|
||||||
|
<(cat "''${references[@]}" | sort | uniq)
|
||||||
|
touch "$out"
|
||||||
|
''
|
@ -110,8 +110,9 @@ let
|
|||||||
trivialBuilders = self: super:
|
trivialBuilders = self: super:
|
||||||
import ../build-support/trivial-builders {
|
import ../build-support/trivial-builders {
|
||||||
inherit lib;
|
inherit lib;
|
||||||
|
inherit (self) config;
|
||||||
inherit (self) runtimeShell stdenv stdenvNoCC;
|
inherit (self) runtimeShell stdenv stdenvNoCC;
|
||||||
inherit (self.pkgsBuildHost) shellcheck-minimal;
|
inherit (self.pkgsBuildHost) jq shellcheck-minimal;
|
||||||
inherit (self.pkgsBuildHost.xorg) lndir;
|
inherit (self.pkgsBuildHost.xorg) lndir;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user