feat(nix/dependency-analyzer): improved directDrvDeps for Nix >= 2.6
This codepath will basically never be used in depot, but I want to add it as kind of a note to myself. It's kind of a neat feature, although I'm not quite sure it is going to stick around. Change-Id: If0e26ef47bdedc6dbf3d048ad4fc9a3a1fd6c5a2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6833 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
parent
57d5988b34
commit
3fab3b780b
1 changed files with 25 additions and 11 deletions
|
@ -23,19 +23,33 @@ let
|
|||
in
|
||||
appendContext drvPath' { ${drvPath'} = { path = true; }; };
|
||||
|
||||
# Find all quoted references to a derivation path in the specified drv file.
|
||||
# Should correspond to the list of input derivations, but is obviously a big
|
||||
# HACK as we just grep for store paths that look right. This should eventually
|
||||
# be solved properly by parsing the drv file.
|
||||
# Determine all paths a derivation depends on, i.e. input derivations and
|
||||
# files imported into the Nix store.
|
||||
#
|
||||
# Implementation for Nix < 2.6 is quite hacky at the moment.
|
||||
#
|
||||
# Type: str -> [str]
|
||||
directDrvDeps = drvPath: builtins.concatLists (
|
||||
builtins.filter builtins.isList (
|
||||
builtins.split
|
||||
"\"(${lib.escapeRegex builtins.storeDir}/[[:alnum:]+._?=-]+.drv)\""
|
||||
(builtins.readFile drvPath)
|
||||
)
|
||||
);
|
||||
#
|
||||
# TODO(sterni): clean this up and expose it
|
||||
directDrvDeps =
|
||||
if lib.versionAtLeast builtins.nixVersion "2.6"
|
||||
then
|
||||
# Since https://github.com/NixOS/nix/pull/1643, Nix apparently »preserves
|
||||
# string context« through a readFile invocation. This has the side effect
|
||||
# that it becomes possible to query the actual references a store path has.
|
||||
# Not a 100% sure this is intended, but _very_ convenient for us here.
|
||||
drvPath: builtins.attrNames (builtins.getContext (builtins.readFile drvPath))
|
||||
else
|
||||
# For Nix < 2.6 we have to rely on HACK, namely grepping for quoted store
|
||||
# path references in the file. In the future this should be replaced by
|
||||
# a proper derivation parser.
|
||||
drvPath: builtins.concatLists (
|
||||
builtins.filter builtins.isList (
|
||||
builtins.split
|
||||
"\"(${lib.escapeRegex builtins.storeDir}/[[:alnum:]+._?=-]+.drv)\""
|
||||
(builtins.readFile drvPath)
|
||||
)
|
||||
);
|
||||
|
||||
# Maps a list of derivation to the list of corresponding `drvPath`s.
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue