forked from lix-project/lix
![Eelco Dolstra](/assets/img/avatar_default.png)
get rid of GC roots. Nix-build places a symlink `result' in the current directory. Previously, removing that symlink would not remove the store path being linked to as a GC root. Now, the GC root created by nix-build is actually a symlink in `/nix/var/nix/gcroots/auto' to `result'. So if that symlink is removed the GC root automatically becomes invalid (since it can no longer be resolved). The root itself is not automatically removed - the garbage collector should delete dangling roots.
60 lines
1.3 KiB
Plaintext
60 lines
1.3 KiB
Plaintext
#! @shell@ -e
|
|
|
|
nixExpr=$1
|
|
|
|
if test -z "$nixExpr"; then
|
|
echo "syntax: $0 NIX-EXPR..." >&2
|
|
exit 1
|
|
fi
|
|
|
|
extraArgs=
|
|
addDrvLink=0
|
|
addOutLink=1
|
|
|
|
|
|
trap 'rm -f ./.nix-build-tmp-*' EXIT
|
|
|
|
|
|
# Process the arguments.
|
|
for i in "$@"; do
|
|
case "$i" in
|
|
|
|
--add-drv-link)
|
|
addDrvLink=1
|
|
;;
|
|
|
|
--no-link)
|
|
addOutLink=0
|
|
;;
|
|
|
|
-*)
|
|
extraArgs="$extraArgs $i"
|
|
;;
|
|
|
|
*)
|
|
# Instantiate the Nix expression.
|
|
prefix=
|
|
if test "$addDrvLink" = 0; then prefix=.nix-build-tmp-; fi
|
|
storeExprs=$(@bindir@/nix-instantiate \
|
|
--add-root ./${prefix}derivation --indirect \
|
|
"$i")
|
|
|
|
for j in $storeExprs; do
|
|
echo "store expression is $j $(readlink "$j")" >&2
|
|
done
|
|
|
|
# Build the resulting store derivation.
|
|
prefix=
|
|
if test "$addOutLink" = 0; then prefix=.nix-build-tmp-; fi
|
|
outPaths=$(@bindir@/nix-store \
|
|
--add-root ./${prefix}result --indirect \
|
|
-rv $extraArgs $storeExprs)
|
|
|
|
for j in $outPaths; do
|
|
echo "$j $(readlink "$j")"
|
|
done
|
|
|
|
;;
|
|
esac
|
|
done
|