blob: 9d6eabbb866b81de2e93ec4e601663d1334662c0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
{ runCommand, writeShellApplication, rsync, lib, ... }:
args@{ name, paths, preferLocalBuild ? true, allowSubstitutes ? false, postBuild ? "" }:
let
env = builtins.removeAttrs args [ "name" "postBuild" ]] // {
inherit preferLocalBuild allowSubstitutes;
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [
rsync
replaceBadSymlink
];
passAsFile = [ "paths" ];
};
# copyDirs = p: ''
# ${lib.getExe rsync} -rv --copy-dirlinks --links --executability "${p}/" "$out"
# '';
replaceBadSymlink = writeShellApplication {
name = "replaceBadSymlink";
# runtimeInputs = [ coreutils ];
text = ''
FILE="''${1-}"
if [[ -z "$FILE" ]]; then
>&2 echo "Need a file input"
fi
REALPATH="$(readlink -f "$FILE")"
case "$REALPATH" in
"/nix/store/"* )
echo "Replacing $FILE by $REALPATH"
cp -v --remove-destination "$REALPATH" "$FILE"
;;
esac
'';
};
in runCommand name env ''
mkdir -p $out
for i in $(cat $pathsPath); do
rsync -rv --copy-dirlinks --links --executability "$i/" "$out"
done
find $out -type l -exec "replaceBadSymlink {}" \;
${postBuild}
''
|