aa122cbae7
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
47 lines
1.4 KiB
Nix
47 lines
1.4 KiB
Nix
{ depot, lib, pkgs, ... }:
|
||
|
||
let
|
||
|
||
inherit (depot.nix.yants)
|
||
defun
|
||
list
|
||
drv
|
||
;
|
||
|
||
/* Realize drvDeps, then return drvOut if that succeds.
|
||
* This can be used to make drvOut depend on the
|
||
* build success of all drvDeps without making each drvDep
|
||
* a dependency of drvOut.
|
||
* => drvOut is not rebuilt if drvDep changes
|
||
*/
|
||
drvSeqL = defun [ (list drv) drv drv ]
|
||
(drvDeps: drvOut:
|
||
let
|
||
drvOutOutputs = drvOut.outputs or [ "out" ];
|
||
in
|
||
pkgs.runCommandLocal drvOut.name
|
||
{
|
||
# we inherit all attributes in order to replicate
|
||
# the original derivation as much as possible
|
||
outputs = drvOutOutputs;
|
||
passthru = drvOut.drvAttrs;
|
||
# depend on drvDeps (by putting it in builder context)
|
||
inherit drvDeps;
|
||
}
|
||
# the outputs of the original derivation are replicated
|
||
# by creating a symlink to the old output path
|
||
(lib.concatMapStrings
|
||
(output: ''
|
||
target=${lib.escapeShellArg drvOut.${output}}
|
||
# if the target is already a symlink, follow it until it’s not;
|
||
# this is done to prevent too many dereferences
|
||
target=$(readlink -e "$target")
|
||
# link to the output
|
||
ln -s "$target" "${"$"}${output}"
|
||
'')
|
||
drvOutOutputs));
|
||
|
||
in
|
||
{
|
||
__functor = _: drvSeqL;
|
||
}
|