Commit 43df2b50 authored by Robert Hensing's avatar Robert Hensing
Browse files

devShellTools.{unstructuredDerivationInputEnv,derivationOutputEnv}: extract

parent 4cf7951a
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
{ lib }:
{
  lib,
  writeText,
}:
let
  inherit (builtins) typeOf;
in
@@ -13,4 +16,24 @@ rec {
    if typeOf value == "path" then "${value}"
    else if typeOf value == "list" then toString (map valueToString value)
    else toString value;


  # https://github.com/NixOS/nix/blob/2.8.0/src/libstore/build/local-derivation-goal.cc#L992-L1004
  unstructuredDerivationInputEnv = { drvAttrs }:
    # FIXME: this should be `normalAttrs // passAsFileAttrs`
    lib.mapAttrs'
      (name: value:
        let str = valueToString value;
        in if lib.elem name (drvAttrs.passAsFile or [])
        then lib.nameValuePair "${name}Path" (writeText "pass-as-text-${name}" str)
        else lib.nameValuePair name str
      )
      drvAttrs;

  derivationOutputEnv = { outputList, outputMap }:
    # A mapping from output name to the nix store path where they should end up
    # https://github.com/NixOS/nix/blob/2.8.0/src/libexpr/primops.cc#L1253
    lib.genAttrs outputList (output: builtins.unsafeDiscardStringContext outputMap.${output}.outPath);


}
+3 −10
Original line number Diff line number Diff line
@@ -1190,16 +1190,9 @@ rec {
        # https://github.com/NixOS/nix/blob/2.8.0/src/libstore/globals.hh#L464-L465
        sandboxBuildDir = "/build";

        # https://github.com/NixOS/nix/blob/2.8.0/src/libstore/build/local-derivation-goal.cc#L992-L1004
        drvEnv = lib.mapAttrs' (name: value:
          let str = valueToString value;
          in if lib.elem name (drv.drvAttrs.passAsFile or [])
          then lib.nameValuePair "${name}Path" (writeText "pass-as-text-${name}" str)
          else lib.nameValuePair name str
        ) drv.drvAttrs //
          # A mapping from output name to the nix store path where they should end up
          # https://github.com/NixOS/nix/blob/2.8.0/src/libexpr/primops.cc#L1253
          lib.genAttrs drv.outputs (output: builtins.unsafeDiscardStringContext drv.${output}.outPath);
        drvEnv =
          devShellTools.unstructuredDerivationInputEnv { inherit (drv) drvAttrs; }
          // devShellTools.derivationOutputEnv { outputList = drv.outputs; outputMap = drv; };

        # Environment variables set in the image
        envVars = {