From bc0989e0b762be8d79373517b5b17fe78f08a02e Mon Sep 17 00:00:00 2001 From: Michael Raitza Date: Wed, 17 Feb 2021 10:43:26 +0100 Subject: [PATCH] Add filtered src tree to non-nix redo targets --- builder.nix | 5 ++++- nixredo | 12 +++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) 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"