diff --git a/builder.nix b/builder.nix index e386aea..5f5d926 100644 --- a/builder.nix +++ b/builder.nix @@ -1,4 +1,4 @@ -buildArgs@{ lib ? import ./lib.nix {}, nixpkgs ? , pkgs ? import nixpkgs {} }: +buildArgs@{ lib ? import ./lib.nix {}, nixpkgs ? , pkgs ? import nixpkgs {}, root, filter ? [] }: let inherit (lib) searchPath whichdo d1 d2; @@ -22,6 +22,9 @@ let in if imported.success then imported.value else { + src = filterSource + (path: type: type != "directory" || (baseNameOf path != ".git" && (all (x: trace x path != x) filter))) + (/. + root); builder = '' #!/bin/sh set -e diff --git a/nixredo b/nixredo index 2e5285b..953d38c 100644 --- a/nixredo +++ b/nixredo @@ -1,14 +1,24 @@ #!/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@ {}; } \"$f\"" | + --expr " import @buildernix@ { lib = import @libnix@ {}; root =\"$S\"; filter = [ \"$filter\" ]; } \"$f\"" | @jq@ -r '.[0].outputs.out') [ -n "$out" ] || exit 127 rm -rf "$3"