linkFarm: allow entries to be an attrset
This commit is contained in:
parent
b54257fb36
commit
a93aed5bab
|
@ -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}
|
||||
'';
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue