mirror of
https://github.com/NixOS/nix.git
synced 2025-11-21 01:39:36 +01:00
Clean up store hierarchy with IndirectRootStore
See the API doc comments for details.
This commit is contained in:
parent
13269ba93b
commit
60d8dd7aea
12 changed files with 136 additions and 37 deletions
48
src/libstore/indirect-root-store.hh
Normal file
48
src/libstore/indirect-root-store.hh
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#pragma once
|
||||
///@file
|
||||
|
||||
#include "local-fs-store.hh"
|
||||
|
||||
namespace nix {
|
||||
|
||||
/**
|
||||
* Mix-in class for implementing permanent roots as a pair of a direct
|
||||
* (strong) reference and indirect weak reference to the first
|
||||
* reference.
|
||||
*
|
||||
* See methods for details on the operations it represents.
|
||||
*/
|
||||
struct IndirectRootStore : public virtual LocalFSStore
|
||||
{
|
||||
inline static std::string operationName = "Indirect GC roots registration";
|
||||
|
||||
/**
|
||||
* Implementation of `LocalFSStore::addPermRoot` where the permanent
|
||||
* root is a pair of
|
||||
*
|
||||
* - The user-facing symlink which all implementations must create
|
||||
*
|
||||
* - An additional weak reference known as the "indirect root" that
|
||||
* points to that symlink.
|
||||
*
|
||||
* The garbage collector will automatically remove the indirect root
|
||||
* when it finds that the symlink has disappeared.
|
||||
*
|
||||
* The implementation of this method is concrete, but it delegates
|
||||
* to `addIndirectRoot()` which is abstract.
|
||||
*/
|
||||
Path addPermRoot(const StorePath & storePath, const Path & gcRoot) override final;
|
||||
|
||||
/**
|
||||
* Add an indirect root, which is a weak reference to the
|
||||
* user-facing symlink created by `addPermRoot()`.
|
||||
*
|
||||
* @param path user-facing and user-controlled symlink to a store
|
||||
* path.
|
||||
*
|
||||
* The form this weak-reference takes is implementation-specific.
|
||||
*/
|
||||
virtual void addIndirectRoot(const Path & path) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue