linkFarm: allow entries to be an attrset

This commit is contained in:
Bernardo Meurer 2022-04-25 16:17:21 -07:00
parent b54257fb36
commit a93aed5bab
No known key found for this signature in database

View file

@ -458,8 +458,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:
*
@ -475,17 +478,26 @@ rec {
*
* See the note on symlinkJoin for the difference between linkFarm and symlinkJoin.
*/
linkFarm = name: entries: runCommand name {
preferLocalBuild = true;
allowSubstitutes = false;
passthru = lib.listToAttrs (map (x: lib.nameValuePair x.name x.path) entries);
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}
'';
/*