From 3f89bc4a7c1486807481b41e8893d53c0ee3e601 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 20 Jun 2024 00:40:44 -0700 Subject: [PATCH] allow 'nix build'-specific nix-build-and-cache args We need --no-link for the complement script. I picked the syntax for this as an analogy with 'cargo rustc --cargo-args -- --rustc-args', but not sure how I feel about it. --- bin/nix-build-and-cache | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/bin/nix-build-and-cache b/bin/nix-build-and-cache index ff06bc96..a9d097a6 100755 --- a/bin/nix-build-and-cache +++ b/bin/nix-build-and-cache @@ -5,11 +5,33 @@ set -euo pipefail toplevel="$(git rev-parse --show-toplevel)" # Build and cache the specified arguments +# +# Usage: nix-build-and-cache just [args...] -- [build-only-args...] +# +# Arguments after the '--' (build-only-args) will only be passed to the +# 'nix build' command, while arguments before '--' will also be passed to any +# other nix command using the installable list. This is useful for things like +# '--no-link', which are only relevant to 'nix build'. just() { + build_args=() + args=() + build_only_mode=0 + for arg in "$@"; do + if [ "$build_only_mode" = 1 ]; then + build_args+=( "$arg" ) + elif [ "$arg" = "--" ]; then + # Everything after the -- is passed only to 'nix build' + build_only_mode=1 + else + args+=( "$arg" ) + build_args+=( "$arg" ) + fi + done + if command -v nom &> /dev/null; then - nom build "$@" + nom build "${build_args[@]}" else - nix build "$@" + nix build "${build_args[@]}" fi if [ -z ${ATTIC_TOKEN+x} ]; then @@ -24,7 +46,7 @@ just() { "$ATTIC_TOKEN" # Find all output paths of the installables and their build dependencies - readarray -t derivations < <(nix path-info --derivation "$@") + readarray -t derivations < <(nix path-info --derivation "${args[@]}") cache=() for derivation in "${derivations[@]}"; do cache+=(