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}
|
||||
|
||||
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,
|
||||
|
||||
```nix
|
||||
writeReferencesToFile (writeScriptBin "hi" ''${hello}/bin/hello'')
|
||||
writeClosure [ (writeScriptBin "hi" ''${hello}/bin/hello'') ]
|
||||
```
|
||||
|
||||
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)
|
||||
|
||||
- `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`.
|
||||
|
||||
- `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
|
||||
inherit (lib)
|
||||
@ -625,18 +625,22 @@ rec {
|
||||
|
||||
# Docs in doc/build-helpers/trivial-build-helpers.chapter.md
|
||||
# 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
|
||||
while read path; do
|
||||
echo $path >> $out
|
||||
read dummy
|
||||
read nrRefs
|
||||
for ((i = 0; i < nrRefs; i++)); do read ref; done
|
||||
done < graph
|
||||
jq -r ".graph | map(.path) | sort | .[]" "$NIX_ATTRS_JSON_FILE" > "$out"
|
||||
'';
|
||||
|
||||
# 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:
|
||||
import ../build-support/trivial-builders {
|
||||
inherit lib;
|
||||
inherit (self) config;
|
||||
inherit (self) runtimeShell stdenv stdenvNoCC;
|
||||
inherit (self.pkgsBuildHost) shellcheck-minimal;
|
||||
inherit (self.pkgsBuildHost) jq shellcheck-minimal;
|
||||
inherit (self.pkgsBuildHost.xorg) lndir;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user