Merge pull request #232459 from Kranzes/nixos-rebuild

nixos-rebuild: make --use-substitutes/-s/--substitute-on-destination work with flakes
This commit is contained in:
Ilan Joselevich 2023-07-09 23:09:47 +03:00 committed by GitHub
commit 3e92ad30a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,7 +17,7 @@ showSyntax() {
# Parse the command line. # Parse the command line.
origArgs=("$@") origArgs=("$@")
copyClosureFlags=() copyFlags=()
extraBuildFlags=() extraBuildFlags=()
lockFlags=() lockFlags=()
flakeFlags=(--extra-experimental-features 'nix-command flakes') flakeFlags=(--extra-experimental-features 'nix-command flakes')
@ -74,8 +74,8 @@ while [ "$#" -gt 0 ]; do
upgrade=1 upgrade=1
upgrade_all=1 upgrade_all=1
;; ;;
--use-substitutes|-s) --use-substitutes|--substitute-on-destination|-s)
copyClosureFlags+=("$i") copyFlags+=("-s")
;; ;;
-I|--max-jobs|-j|--cores|--builders|--log-format) -I|--max-jobs|-j|--cores|--builders|--log-format)
j="$1"; shift 1 j="$1"; shift 1
@ -192,12 +192,12 @@ copyToTarget() {
if ! [ "$targetHost" = "$buildHost" ]; then if ! [ "$targetHost" = "$buildHost" ]; then
if [ -z "$targetHost" ]; then if [ -z "$targetHost" ]; then
logVerbose "Running nix-copy-closure with these NIX_SSHOPTS: $SSHOPTS" logVerbose "Running nix-copy-closure with these NIX_SSHOPTS: $SSHOPTS"
NIX_SSHOPTS=$SSHOPTS runCmd nix-copy-closure "${copyClosureFlags[@]}" --from "$buildHost" "$1" NIX_SSHOPTS=$SSHOPTS runCmd nix-copy-closure "${copyFlags[@]}" --from "$buildHost" "$1"
elif [ -z "$buildHost" ]; then elif [ -z "$buildHost" ]; then
logVerbose "Running nix-copy-closure with these NIX_SSHOPTS: $SSHOPTS" logVerbose "Running nix-copy-closure with these NIX_SSHOPTS: $SSHOPTS"
NIX_SSHOPTS=$SSHOPTS runCmd nix-copy-closure "${copyClosureFlags[@]}" --to "$targetHost" "$1" NIX_SSHOPTS=$SSHOPTS runCmd nix-copy-closure "${copyFlags[@]}" --to "$targetHost" "$1"
else else
buildHostCmd nix-copy-closure "${copyClosureFlags[@]}" --to "$targetHost" "$1" buildHostCmd nix-copy-closure "${copyFlags[@]}" --to "$targetHost" "$1"
fi fi
fi fi
} }
@ -292,7 +292,7 @@ nixFlakeBuild() {
drv="$(runCmd nix "${flakeFlags[@]}" eval --raw "${attr}.drvPath" "${evalArgs[@]}" "${extraBuildFlags[@]}")" drv="$(runCmd nix "${flakeFlags[@]}" eval --raw "${attr}.drvPath" "${evalArgs[@]}" "${extraBuildFlags[@]}")"
if [ -a "$drv" ]; then if [ -a "$drv" ]; then
logVerbose "Running nix with these NIX_SSHOPTS: $SSHOPTS" logVerbose "Running nix with these NIX_SSHOPTS: $SSHOPTS"
NIX_SSHOPTS=$SSHOPTS runCmd nix "${flakeFlags[@]}" copy --derivation --to "ssh://$buildHost" "$drv" NIX_SSHOPTS=$SSHOPTS runCmd nix "${flakeFlags[@]}" copy "${copyFlags[@]}" --derivation --to "ssh://$buildHost" "$drv"
buildHostCmd nix-store -r "$drv" "${buildArgs[@]}" buildHostCmd nix-store -r "$drv" "${buildArgs[@]}"
else else
log "nix eval failed" log "nix eval failed"
@ -480,7 +480,7 @@ if [[ -n $buildNix && -z $flake ]]; then
if [ -a "$nixDrv" ]; then if [ -a "$nixDrv" ]; then
nix-store -r "$nixDrv"'!'"out" --add-root "$tmpDir/nix" --indirect >/dev/null nix-store -r "$nixDrv"'!'"out" --add-root "$tmpDir/nix" --indirect >/dev/null
if [ -n "$buildHost" ]; then if [ -n "$buildHost" ]; then
nix-copy-closure "${copyClosureFlags[@]}" --to "$buildHost" "$nixDrv" nix-copy-closure "${copyFlags[@]}" --to "$buildHost" "$nixDrv"
# The nix build produces multiple outputs, we add them all to the remote path # The nix build produces multiple outputs, we add them all to the remote path
for p in $(buildHostCmd nix-store -r "$(readlink "$nixDrv")" "${buildArgs[@]}"); do for p in $(buildHostCmd nix-store -r "$(readlink "$nixDrv")" "${buildArgs[@]}"); do
remoteNix="$remoteNix${remoteNix:+:}$p/bin" remoteNix="$remoteNix${remoteNix:+:}$p/bin"