Add a "root" parameter to local stores

This makes it easier to create a diverted store, i.e.

  NIX_REMOTE="local?root=/tmp/root"

instead of

  NIX_REMOTE="local?real=/tmp/root/nix/store&state=/tmp/root/nix/var/nix" NIX_LOG_DIR=/tmp/root/nix/var/log
This commit is contained in:
Eelco Dolstra 2016-07-27 17:47:18 +02:00
parent 2fad86f361
commit 3eb6217508
5 changed files with 13 additions and 5 deletions

View file

@ -2910,7 +2910,7 @@ Path DerivationGoal::openLogFile()
string baseName = baseNameOf(drvPath); string baseName = baseNameOf(drvPath);
/* Create a log file. */ /* Create a log file. */
Path dir = (format("%1%/%2%/%3%/") % settings.nixLogDir % drvsLogDir % string(baseName, 0, 2)).str(); Path dir = (format("%1%/%2%/%3%/") % worker.store.logDir % drvsLogDir % string(baseName, 0, 2)).str();
createDirs(dir); createDirs(dir);
Path logFileName = (format("%1%/%2%%3%") Path logFileName = (format("%1%/%2%%3%")

View file

@ -7,7 +7,9 @@ namespace nix {
LocalFSStore::LocalFSStore(const Params & params) LocalFSStore::LocalFSStore(const Params & params)
: Store(params) : Store(params)
, stateDir(get(params, "state", settings.nixStateDir)) , rootDir(get(params, "root"))
, stateDir(canonPath(get(params, "state", rootDir != "" ? rootDir + "/nix/var/nix" : settings.nixStateDir)))
, logDir(canonPath(get(params, "log", rootDir != "" ? rootDir + "/nix/var/log/nix" : settings.nixLogDir)))
{ {
} }

View file

@ -38,7 +38,7 @@ namespace nix {
LocalStore::LocalStore(const Params & params) LocalStore::LocalStore(const Params & params)
: LocalFSStore(params) : LocalFSStore(params)
, realStoreDir(get(params, "real", storeDir)) , realStoreDir(get(params, "real", rootDir != "" ? rootDir + "/nix/store" : storeDir))
, dbDir(stateDir + "/db") , dbDir(stateDir + "/db")
, linksDir(realStoreDir + "/.links") , linksDir(realStoreDir + "/.links")
, reservedPath(dbDir + "/reserved") , reservedPath(dbDir + "/reserved")

View file

@ -491,7 +491,9 @@ protected:
class LocalFSStore : public Store class LocalFSStore : public Store
{ {
public: public:
const Path rootDir;
const Path stateDir; const Path stateDir;
const Path logDir;
LocalFSStore(const Params & params); LocalFSStore(const Params & params);

View file

@ -483,6 +483,10 @@ static void opReadLog(Strings opFlags, Strings opArgs)
RunPager pager; RunPager pager;
// FIXME: move getting logs into Store.
auto store2 = std::dynamic_pointer_cast<LocalFSStore>(store);
if (!store2) throw Error(format("store %s does not support reading logs") % store->getUri());
for (auto & i : opArgs) { for (auto & i : opArgs) {
Path path = useDeriver(store->followLinksToStorePath(i)); Path path = useDeriver(store->followLinksToStorePath(i));
@ -493,8 +497,8 @@ static void opReadLog(Strings opFlags, Strings opArgs)
Path logPath = Path logPath =
j == 0 j == 0
? (format("%1%/%2%/%3%/%4%") % settings.nixLogDir % drvsLogDir % string(baseName, 0, 2) % string(baseName, 2)).str() ? (format("%1%/%2%/%3%/%4%") % store2->logDir % drvsLogDir % string(baseName, 0, 2) % string(baseName, 2)).str()
: (format("%1%/%2%/%3%") % settings.nixLogDir % drvsLogDir % baseName).str(); : (format("%1%/%2%/%3%") % store2->logDir % drvsLogDir % baseName).str();
Path logBz2Path = logPath + ".bz2"; Path logBz2Path = logPath + ".bz2";
if (pathExists(logPath)) { if (pathExists(logPath)) {