Unverified Commit 449ae757 authored by Robert Hensing's avatar Robert Hensing Committed by GitHub
Browse files

Merge pull request #170048 from lovesegfault/link-farm-passthru

linkFarm: add entries to passthru
parents 840223e3 a93aed5b
Loading
Loading
Loading
Loading
+26 −10
Original line number Diff line number Diff line
@@ -465,8 +465,11 @@ rec {
   *
   * This creates a simple derivation with symlinks to all inputs.
   *
   * entries is a list of attribute sets like
   * { name = "name" ; path = "/nix/store/..."; }
   * entries can be a list of attribute sets like
   * [ { name = "name" ; path = "/nix/store/..."; } ]
   *
   * or an attribute set name -> path like:
   * { name = "/nix/store/..."; other = "/nix/store/..."; }
   *
   * Example:
   *
@@ -482,13 +485,26 @@ rec {
   *
   * See the note on symlinkJoin for the difference between linkFarm and symlinkJoin.
   */
  linkFarm = name: entries: runCommand name { preferLocalBuild = true; allowSubstitutes = false; }
    ''mkdir -p $out
  linkFarm = name: entries:
  let
    entries' =
      if (lib.isAttrs entries) then entries
      else if (lib.isList entries) then lib.listToAttrs (map (x: lib.nameValuePair x.name x.path) entries)
      else throw "linkFarm entries must be either attrs or a list!";

    linkCommands = lib.mapAttrsToList (name: path: ''
      mkdir -p "$(dirname ${lib.escapeShellArg "${name}"})"
      ln -s ${lib.escapeShellArg "${path}"} ${lib.escapeShellArg "${name}"}
    '') entries';
  in
  runCommand name {
    preferLocalBuild = true;
    allowSubstitutes = false;
    passthru.entries = entries';
   } ''
    mkdir -p $out
    cd $out
      ${lib.concatMapStrings (x: ''
          mkdir -p "$(dirname ${lib.escapeShellArg x.name})"
          ln -s ${lib.escapeShellArg "${x.path}"} ${lib.escapeShellArg x.name}
      '') entries}
    ${lib.concatStrings linkCommands}
  '';

  /*