Go to the source code of this file.
Classes | |
struct | nix::Generation |
Typedefs | |
typedef uint64_t | nix::GenerationNumber |
typedef std::list< Generation > | nix::Generations |
Implementation of Profiles.
See the manual for additional information.
typedef uint64_t nix::GenerationNumber |
A positive number identifying a generation for a given profile.
Generation numbers are assigned sequentially. Each new generation is assigned 1 + the current highest generation number.
typedef std::list<Generation> nix::Generations |
All the generations of a profile
Path nix::createGeneration | ( | LocalFSStore & | store, |
Path | profile, | ||
StorePath | outPath ) |
Create a new generation of the given profile
If the previous generation (not the currently active one!) has a distinct store object, a fresh generation number is mapped to the given store object, referenced by path. Otherwise, the previous generation is assumed.
The behavior of reusing existing generations like this makes this procedure idempotent. It also avoids clutter.
Path nix::defaultChannelsDir | ( | ) |
Create and return the path to the file used for storing the users's channels
void nix::deleteGeneration | ( | const Path & | profile, |
GenerationNumber | gen ) |
Unconditionally delete a generation
profile | A profile specified by its name and location combined into a path. |
gen | The generation number specifying exactly which generation to delete. |
Because there is no check of whether the generation to delete is active, this is somewhat unsafe.
void nix::deleteGenerations | ( | const Path & | profile, |
const std::set< GenerationNumber > & | gensToDelete, | ||
bool | dryRun ) |
Delete the given set of generations.
profile | The profile, specified by its name and location combined into a path, whose generations we want to delete. |
gensToDelete | The generations to delete, specified by a set of numbers. |
dryRun | Log what would be deleted instead of actually doing so. |
Trying to delete the currently active generation will fail, and cause no generations to be deleted.
void nix::deleteGenerationsGreaterThan | ( | const Path & | profile, |
GenerationNumber | max, | ||
bool | dryRun ) |
Delete generations older than max
passed the current generation.
profile | The profile, specified by its name and location combined into a path, whose generations we want to delete. |
max | How many generations to keep up to the current one. Must be at least 1 so we don't delete the current one. |
dryRun | Log what would be deleted instead of actually doing so. |
void nix::deleteGenerationsOlderThan | ( | const Path & | profile, |
time_t | t, | ||
bool | dryRun ) |
Delete generations older than t
, except for the most recent one older than t
.
profile | The profile, specified by its name and location combined into a path, whose generations we want to delete. |
dryRun | Log what would be deleted instead of actually doing so. |
void nix::deleteOldGenerations | ( | const Path & | profile, |
bool | dryRun ) |
Delete all generations other than the current one
profile | The profile, specified by its name and location combined into a path, whose generations we want to delete. |
dryRun | Log what would be deleted instead of actually doing so. |
std::pair< Generations, std::optional< GenerationNumber > > nix::findGenerations | ( | Path | profile | ) |
Find all generations for the given profile.
profile | A profile specified by its name and location combined into a path. E.g. if "foo" is the name of the profile, and "/bar/baz" is the directory it is in, then the path "/bar/baz/foo" would be the argument for this parameter. |
Note that the current/active generation need not be the latest one.
Path nix::getDefaultProfile | ( | ) |
Resolve the default profile (~/.nix-profile by default, $XDG_STATE_HOME/nix/profile if XDG Base Directory Support is enabled), and create if doesn't exist
Ensure exclusive access to a profile. Any command that modifies the profile first acquires this lock.
std::string nix::optimisticLockProfile | ( | const Path & | profile | ) |
Optimistic locking is used by long-running operations like ‘nix-env -i’. Instead of acquiring the exclusive lock for the entire duration of the operation, we just perform the operation optimistically (without an exclusive lock), and check at the end whether the profile changed while we were busy (i.e., the symlink target changed). If so, the operation is restarted. Restarting is generally cheap, since the build results are still in the Nix store. Most of the time, only the user environment has to be rebuilt.
time_t nix::parseOlderThanTimeSpec | ( | std::string_view | timeSpec | ) |
Parse a temp spec intended for deleteGenerationsOlderThan()
.
Throws an exception if timeSpec
fails to parse.
Path nix::profilesDir | ( | ) |
Create and return the path to a directory suitable for storing the user’s profiles.
Path nix::rootChannelsDir | ( | ) |
Return the path to the channel directory for root (but don't try creating it)
Path nix::rootProfilesDir | ( | ) |
Return the path to the profile directory for root (but don't try creating it)
void nix::switchGeneration | ( | const Path & | profile, |
std::optional< GenerationNumber > | dstGen, | ||
bool | dryRun ) |
Roll back a profile to the specified generation, or to the most recent one older than the current.