1
0
Fork 0
nixredo/nixredo

30 lines
983 B
Plaintext
Raw Normal View History

#!/bin/sh
exec >&2
[ "${S+x}" = x ] || { printf "Set S to the root location of your source tree\n"; exit 127; }
[ "${NIXREDO_ROOT-x}" != x ] || { printf "Set NIXREDO_ROOT. Set empty to use global nix store\n"; exit 127; }
if [ $# -eq 0 ]; then set -- all; fi
S=$(realpath -s "$S")
if [ "${NIXREDO_ROOT#$S}" != "${NIXREDO_ROOT}" ]; then
filter=$(realpath -s "${NIXREDO_ROOT}")
else
filter=
fi
set -e
set -- "$1" "$1" "$1.redo.tmp"
f=$(realpath -s "$1")
out=$(nix -vL --show-trace build ${NIXREDO_ROOT:+--store "$NIXREDO_ROOT"} \
--option auto-optimise-store true --option substituters daemon \
--impure --json --no-link \
--expr " import @buildernix@ { lib = import @libnix@ {}; root =\"$S\"; filter = [ \"$filter\" ]; } \"$f\"" |
@jq@ -r '.[0].outputs.out')
[ -n "$out" ] || exit 127
rm -rf "$3"
ln -s "${NIXREDO_ROOT+$NIXREDO_ROOT}$out" "$3"
# ln "${NIXREDO_ROOT+$NIXREDO_ROOT/}$out" "$3"
# chmod +w "$3"
# touch "$3"
mv "$3" "$1"