index
:
guix
koszko
koszko-scripts
about
summary
refs
log
tree
commit
diff
log msg
author
#pragma once #include "sqlite.hh" #include <string> #include <unordered_set> #include "pathlocks.hh" #include "store-api.hh" #include "util.hh" namespace nix { /* Nix store and database schema version. Version 1 (or 0) was Nix <= 0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10. Version 4 is Nix 0.11. Version 5 is Nix 0.12-0.16. Version 6 is Nix 1.0. Version 7 is Nix 1.3. Guix has always used version 7. */ const int nixSchemaVersion = 7; extern string drvsLogDir; struct Derivation; struct OptimiseStats { unsigned long filesLinked; unsigned long long bytesFreed; unsigned long long blocksFreed; OptimiseStats() { filesLinked = 0; bytesFreed = blocksFreed = 0; } }; class LocalStore : public StoreAPI { private: /* The currently running substituter or empty. */ std::shared_ptr<Agent> runningSubstituter; /* Ensure the substituter is running and return it. */ std::shared_ptr<Agent> substituter(); Path linksDir; public: /* Initialise the local store, upgrading the schema if necessary. */ LocalStore(bool reserveSpace = true); ~LocalStore(); /* Implementations of abstract store API methods. */ bool isValidPath(const Path & path); PathSet queryValidPaths(const PathSet & paths); PathSet queryAllValidPaths(); ValidPathInfo queryPathInfo(const Path & path); Hash queryPathHash(const Path & path); void queryReferences(const Path & path, PathSet & references); void queryReferrers(const Path & path, PathSet & referrers); Path queryDeriver(const Path & path); PathSet queryValidDerivers(const Path & path); PathSet queryDerivationOutputs(const Path & path); StringSet queryDerivationOutputNames(const Path & path); Path queryPathFromHashPart(const string & hashPart); PathSet querySubstitutablePaths(const PathSet & paths); void querySubstitutablePathInfos(PathSet & paths, SubstitutablePathInfos & infos); void querySubstitutablePathInfos(const PathSet & paths, SubstitutablePathInfos & infos); Path addToStore(const string & name, const Path & srcPath, bool recursive = true, HashType hashAlgo = htSHA256, PathFilter & filter = defaultPathFilter, bool repair = false); /* Like addToStore(), but the contents of the path are contained in `dump', which is either a NAR serialisation (if recursive == true) or simply the contents of a regular file (if recursive == false). */ Path addToStoreFromDump(const string & dump, const string & name, bool recursive = true, HashType hashAlgo = htSHA256, bool repair = false); Path addTextToStore(const string & name, const string & s, const PathSet & references, bool repair = false); void exportPath(const Path & path, bool sign, Sink & sink); Paths importPaths(bool requireSignature, Source & source); void buildPaths(const PathSet & paths, BuildMode buildMode); void ensurePath(const Path & path); void addTempRoot(const Path & path); void addIndirectRoot(const Path & path); void syncWithGC(); Roots findRoots(); void collectGarbage(const GCOptions & options, GCResults & results); /* Optimise the disk space usage of the Nix store by hard-linking files with the same contents. */ void optimiseStore(OptimiseStats & stats); /* Generic variant of the above method. */ void optimiseStore(); /* Optimise a single store path. */ void optimisePath(const Path & path); /* Check the integrity of the Nix store. Returns true if errors remain. */ bool verifyStore(bool checkContents, bool repair); /* Register the validity of a path, i.e., that `path' exists, that the paths referenced by it exists, and in the case of an output path of a derivation, that it has been produced by a successful execution of the derivation (or something equivalent). Also register the hash of the file system contents of the path. The hash must be a SHA-256 hash. */ void registerValidPath(const ValidPathInfo & i