1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 11:36:03 +01:00

Compare commits

...

2 commits

Author SHA1 Message Date
John Ericson
35b08b71a4 registerOutputs: Hoist up optimizePath call and comment rationale 2025-10-16 23:09:19 -04:00
John Ericson
646d1f5ff7 registerOutputs: Swap check and non-check cases in the code
This is the exact same control flow, but with one less branch because it
becomes redundant.
2025-10-16 16:54:47 -04:00

View file

@ -1737,27 +1737,6 @@ SingleDrvOutputs DerivationBuilderImpl::registerOutputs()
dynamicOutputLock.lockPaths({store.toRealPath(finalDestPath)});
}
/* Move files, if needed */
if (store.toRealPath(finalDestPath) != actualPath) {
if (buildMode == bmRepair) {
/* Path already exists, need to replace it */
replaceValidPath(store.toRealPath(finalDestPath), actualPath);
} else if (buildMode == bmCheck) {
/* Path already exists, and we want to compare, so we leave out
new path in place. */
} else if (store.isValidPath(newInfo.path)) {
/* Path already exists because CA path produced by something
else. No moving needed. */
assert(newInfo.ca);
/* Can delete our scratch copy now. */
deletePath(actualPath);
} else {
auto destPath = store.toRealPath(finalDestPath);
deletePath(destPath);
movePath(actualPath, destPath);
}
}
if (buildMode == bmCheck) {
/* Check against already registered outputs */
@ -1799,6 +1778,34 @@ SingleDrvOutputs DerivationBuilderImpl::registerOutputs()
} else {
/* do tasks relating to registering these outputs */
/* Move files, if needed */
if (store.toRealPath(finalDestPath) != actualPath) {
if (buildMode == bmRepair) {
/* Path already exists, need to replace it */
replaceValidPath(store.toRealPath(finalDestPath), actualPath);
/* Optimize store object we just replaced with new
(not-yet-optimized) data. */
store.optimisePath(
store.toRealPath(finalDestPath), NoRepair); // FIXME: combine with scanForReferences()
} else if (store.isValidPath(newInfo.path)) {
/* Path already exists because CA path produced by something
else. No moving needed. */
assert(newInfo.ca);
/* Can delete our scratch copy now. */
deletePath(actualPath);
/* Presume already-existing store object is already
optimized. */
} else {
auto destPath = store.toRealPath(finalDestPath);
deletePath(destPath);
movePath(actualPath, destPath);
/* Optimize store object we just installed from new
(not-yet-optimized) data. */
store.optimisePath(
store.toRealPath(finalDestPath), NoRepair); // FIXME: combine with scanForReferences()
}
}
/* For debugging, print out the referenced and unreferenced paths. */
for (auto & i : inputPaths) {
if (references.count(i))
@ -1807,10 +1814,6 @@ SingleDrvOutputs DerivationBuilderImpl::registerOutputs()
debug("unreferenced input: '%1%'", store.printStorePath(i));
}
if (!store.isValidPath(newInfo.path))
store.optimisePath(
store.toRealPath(finalDestPath), NoRepair); // FIXME: combine with scanForReferences()
newInfo.deriver = drvPath;
newInfo.ultimate = true;
store.signPathInfo(newInfo);