forked from lix-project/lix
Remove a possible existing store path when building CA derivations
In case a previous interrupted build left a garbage path laying around, remove it before trying to move the path to its final location. Fix #4858
This commit is contained in:
parent
db3de0727e
commit
3784c66a46
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
20
tests/ca/build-with-garbage-path.sh
Executable file
20
tests/ca/build-with-garbage-path.sh
Executable 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 shouldn’t 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" ]]
|
|
@ -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 \
|
||||||
|
|
Loading…
Reference in a new issue