diff --git a/src/libstore/build/derivation-building-goal.cc b/src/libstore/build/derivation-building-goal.cc index d2752dfb5..24244ebd4 100644 --- a/src/libstore/build/derivation-building-goal.cc +++ b/src/libstore/build/derivation-building-goal.cc @@ -66,7 +66,7 @@ DerivationBuildingGoal::~DerivationBuildingGoal() ignoreExceptionInDestructor(); } try { - builder->deleteTmpDir(false); + builder->cleanupBuild(false); } catch (...) { ignoreExceptionInDestructor(); } diff --git a/src/libstore/include/nix/store/build/derivation-builder.hh b/src/libstore/include/nix/store/build/derivation-builder.hh index 08708ec05..512d001e0 100644 --- a/src/libstore/include/nix/store/build/derivation-builder.hh +++ b/src/libstore/include/nix/store/build/derivation-builder.hh @@ -200,8 +200,11 @@ struct DerivationBuilder : RestrictionContext /** * Delete the temporary directory, if we have one. + * + * @param force We know the build suceeded, so don't attempt to + * preseve anything for debugging. */ - virtual void deleteTmpDir(bool force) = 0; + virtual void cleanupBuild(bool force) = 0; /** * Kill any processes running under the build user UID or in the diff --git a/src/libstore/unix/build/chroot-derivation-builder.cc b/src/libstore/unix/build/chroot-derivation-builder.cc index 20a4bd6bf..8c9359533 100644 --- a/src/libstore/unix/build/chroot-derivation-builder.cc +++ b/src/libstore/unix/build/chroot-derivation-builder.cc @@ -22,13 +22,6 @@ struct ChrootDerivationBuilder : virtual DerivationBuilderImpl PathsInChroot pathsInChroot; - void deleteTmpDir(bool force) override - { - autoDelChroot.reset(); /* this runs the destructor */ - - DerivationBuilderImpl::deleteTmpDir(force); - } - bool needsHashRewrite() override { return false; @@ -170,12 +163,9 @@ struct ChrootDerivationBuilder : virtual DerivationBuilderImpl { DerivationBuilderImpl::cleanupBuild(force); - if (force) - return; - /* Move paths out of the chroot for easier debugging of build failures. */ - if (buildMode == bmNormal) + if (!force && buildMode == bmNormal) for (auto & [_, status] : initialOutputs) { if (!status.known) continue; @@ -185,6 +175,8 @@ struct ChrootDerivationBuilder : virtual DerivationBuilderImpl if (pathExists(chrootRootDir + p)) std::filesystem::rename((chrootRootDir + p), p); } + + autoDelChroot.reset(); /* this runs the destructor */ } std::pair addDependencyPrep(const StorePath & path) diff --git a/src/libstore/unix/build/derivation-builder.cc b/src/libstore/unix/build/derivation-builder.cc index bd6cac522..241d98ace 100644 --- a/src/libstore/unix/build/derivation-builder.cc +++ b/src/libstore/unix/build/derivation-builder.cc @@ -344,14 +344,10 @@ private: public: - void deleteTmpDir(bool force) override; + void cleanupBuild(bool force) override; void killSandbox(bool getStats) override; -protected: - - virtual void cleanupBuild(bool force); - private: bool decideWhetherDiskFull(); @@ -513,11 +509,6 @@ SingleDrvOutputs DerivationBuilderImpl::unprepareBuild() return builtOutputs; } -void DerivationBuilderImpl::cleanupBuild(bool force) -{ - deleteTmpDir(force); -} - static void chmod_(const Path & path, mode_t mode) { if (chmod(path.c_str(), mode) == -1) @@ -1821,7 +1812,7 @@ SingleDrvOutputs DerivationBuilderImpl::registerOutputs() return builtOutputs; } -void DerivationBuilderImpl::deleteTmpDir(bool force) +void DerivationBuilderImpl::cleanupBuild(bool force) { if (topTmpDir != "") { /* As an extra precaution, even in the event of `deletePath` failing to