Merge pull request #4928 from NixOS/ca/remove-existing-invalid-store-path

Remove a possible existing store path when building CA derivations
This commit is contained in:
Eelco Dolstra 2021-06-21 16:09:21 +02:00 committed by GitHub
commit 24e7353232
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 0 deletions

View file

@ -2487,6 +2487,7 @@ void LocalDerivationGoal::registerOutputs()
assert(newInfo.ca); assert(newInfo.ca);
} else { } else {
auto destPath = worker.store.toRealPath(finalDestPath); auto destPath = worker.store.toRealPath(finalDestPath);
deletePath(destPath);
movePath(actualPath, destPath); movePath(actualPath, destPath);
actualPath = destPath; actualPath = destPath;
} }

View file

@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Regression test for https://github.com/NixOS/nix/issues/4858
source common.sh
sed -i 's/experimental-features .*/& ca-derivations ca-references/' "$NIX_CONF_DIR"/nix.conf
# Get the output path of `rootCA`, and put some garbage instead
outPath="$(nix-build ./content-addressed.nix -A rootCA --no-out-link)"
nix-store --delete "$outPath"
touch "$outPath"
# The build should correctly remove the garbage and put the expected path instead
nix-build ./content-addressed.nix -A rootCA --no-out-link
# Rebuild it. This shouldnt overwrite the existing path
oldInode=$(stat -c '%i' "$outPath")
nix-build ./content-addressed.nix -A rootCA --no-out-link --arg seed 2
newInode=$(stat -c '%i' "$outPath")
[[ "$oldInode" == "$newInode" ]]

View file

@ -45,6 +45,7 @@ nix_tests = \
build.sh \ build.sh \
compute-levels.sh \ compute-levels.sh \
ca/build.sh \ ca/build.sh \
ca/build-with-garbage-path.sh \
ca/substitute.sh \ ca/substitute.sh \
ca/signatures.sh \ ca/signatures.sh \
ca/nix-run.sh \ ca/nix-run.sh \