mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-27 08:16:14 +02:00
Factor out GC path deletion so it can be overridden.
This commit is contained in:
parent
b852bdb3f8
commit
98edbb9686
2 changed files with 16 additions and 2 deletions
|
@ -97,6 +97,13 @@ struct GcStore : public virtual Store
|
||||||
* Perform a garbage collection.
|
* Perform a garbage collection.
|
||||||
*/
|
*/
|
||||||
virtual void collectGarbage(const GCOptions & options, GCResults & results) = 0;
|
virtual void collectGarbage(const GCOptions & options, GCResults & results) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by `collectGarbage` to recursively delete a path.
|
||||||
|
* The default implementation simply calls `deletePath`, but it can be
|
||||||
|
* overridden by stores that wish to provide their own deletion behaviour.
|
||||||
|
*/
|
||||||
|
virtual void deleteGCPath(const Path & path, uint64_t & bytesFreed);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -654,7 +654,8 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
|
||||||
results.paths.insert(path);
|
results.paths.insert(path);
|
||||||
|
|
||||||
uint64_t bytesFreed;
|
uint64_t bytesFreed;
|
||||||
deletePath(realPath, bytesFreed);
|
deleteGCPath(realPath, bytesFreed);
|
||||||
|
|
||||||
results.bytesFreed += bytesFreed;
|
results.bytesFreed += bytesFreed;
|
||||||
|
|
||||||
if (results.bytesFreed > options.maxFreed) {
|
if (results.bytesFreed > options.maxFreed) {
|
||||||
|
@ -872,7 +873,7 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
|
||||||
if (unlink(path.c_str()) == -1)
|
if (unlink(path.c_str()) == -1)
|
||||||
throw SysError("deleting '%1%'", path);
|
throw SysError("deleting '%1%'", path);
|
||||||
|
|
||||||
/* Do not accound for deleted file here. Rely on deletePath()
|
/* Do not account for deleted file here. Rely on deletePath()
|
||||||
accounting. */
|
accounting. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -890,6 +891,12 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GcStore::deleteGCPath(const Path & path, uint64_t & bytesFreed)
|
||||||
|
{
|
||||||
|
deletePath(path, bytesFreed);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void LocalStore::autoGC(bool sync)
|
void LocalStore::autoGC(bool sync)
|
||||||
{
|
{
|
||||||
static auto fakeFreeSpaceFile = getEnv("_NIX_TEST_FREE_SPACE_FILE");
|
static auto fakeFreeSpaceFile = getEnv("_NIX_TEST_FREE_SPACE_FILE");
|
||||||
|
|
Loading…
Reference in a new issue