forked from lix-project/lix
Move addPermRoot into Store
This commit is contained in:
parent
fd205fb6f8
commit
ae4a3cfa03
|
@ -83,7 +83,7 @@ void LocalStore::addIndirectRoot(const Path & path)
|
|||
}
|
||||
|
||||
|
||||
Path addPermRoot(ref<Store> store, const Path & _storePath,
|
||||
Path Store::addPermRoot(const Path & _storePath,
|
||||
const Path & _gcRoot, bool indirect, bool allowOutsideRootsDir)
|
||||
{
|
||||
Path storePath(canonPath(_storePath));
|
||||
|
@ -101,7 +101,7 @@ Path addPermRoot(ref<Store> store, const Path & _storePath,
|
|||
if (pathExists(gcRoot) && (!isLink(gcRoot) || !isInStore(readLink(gcRoot))))
|
||||
throw Error(format("cannot create symlink ‘%1%’; already exists") % gcRoot);
|
||||
makeSymlink(gcRoot, storePath);
|
||||
store->addIndirectRoot(gcRoot);
|
||||
addIndirectRoot(gcRoot);
|
||||
}
|
||||
|
||||
else {
|
||||
|
@ -127,7 +127,7 @@ Path addPermRoot(ref<Store> store, const Path & _storePath,
|
|||
check if the root is in a directory in or linked from the
|
||||
gcroots directory. */
|
||||
if (settings.checkRootReachability) {
|
||||
Roots roots = store->findRoots();
|
||||
Roots roots = findRoots();
|
||||
if (roots.find(gcRoot) == roots.end())
|
||||
printMsg(lvlError,
|
||||
format(
|
||||
|
@ -139,7 +139,7 @@ Path addPermRoot(ref<Store> store, const Path & _storePath,
|
|||
/* Grab the global GC root, causing us to block while a GC is in
|
||||
progress. This prevents the set of permanent roots from
|
||||
increasing while a GC is in progress. */
|
||||
store->syncWithGC();
|
||||
syncWithGC();
|
||||
|
||||
return gcRoot;
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ Path createGeneration(ref<Store> store, Path profile, Path outPath)
|
|||
user environment etc. we've just built. */
|
||||
Path generation;
|
||||
makeName(profile, num + 1, generation);
|
||||
addPermRoot(store, outPath, generation, false, true);
|
||||
store->addPermRoot(outPath, generation, false, true);
|
||||
|
||||
return generation;
|
||||
}
|
||||
|
|
|
@ -255,6 +255,10 @@ public:
|
|||
`path' has disappeared. */
|
||||
virtual void addIndirectRoot(const Path & path) = 0;
|
||||
|
||||
/* Register a permanent GC root. */
|
||||
Path addPermRoot(const Path & storePath,
|
||||
const Path & gcRoot, bool indirect, bool allowOutsideRootsDir = false);
|
||||
|
||||
/* Acquire the global GC lock, then immediately release it. This
|
||||
function must be called after registering a new permanent root,
|
||||
but before exiting. Otherwise, it is possible that a running
|
||||
|
@ -406,11 +410,6 @@ Path computeStorePathForText(const string & name, const string & s,
|
|||
void removeTempRoots();
|
||||
|
||||
|
||||
/* Register a permanent GC root. */
|
||||
Path addPermRoot(ref<Store> store, const Path & storePath,
|
||||
const Path & gcRoot, bool indirect, bool allowOutsideRootsDir = false);
|
||||
|
||||
|
||||
/* Factory method: open the Nix database, either through the local or
|
||||
remote implementation. */
|
||||
ref<Store> openStore(bool reserveSpace = true);
|
||||
|
|
|
@ -32,7 +32,7 @@ static bool indirectRoot = false;
|
|||
enum OutputKind { okPlain, okXML, okJSON };
|
||||
|
||||
|
||||
void processExpr(ref<Store> store, EvalState & state, const Strings & attrPaths,
|
||||
void processExpr(EvalState & state, const Strings & attrPaths,
|
||||
bool parseOnly, bool strict, Bindings & autoArgs,
|
||||
bool evalOnly, OutputKind output, bool location, Expr * e)
|
||||
{
|
||||
|
@ -79,7 +79,7 @@ void processExpr(ref<Store> store, EvalState & state, const Strings & attrPaths,
|
|||
else {
|
||||
Path rootName = gcRoot;
|
||||
if (++rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||
drvPath = addPermRoot(store, drvPath, rootName, indirectRoot);
|
||||
drvPath = state.store->addPermRoot(drvPath, rootName, indirectRoot);
|
||||
}
|
||||
std::cout << format("%1%%2%\n") % drvPath % (outputName != "out" ? "!" + outputName : "");
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ int main(int argc, char * * argv)
|
|||
|
||||
if (readStdin) {
|
||||
Expr * e = parseStdin(state);
|
||||
processExpr(store, state, attrPaths, parseOnly, strict, autoArgs,
|
||||
processExpr(state, attrPaths, parseOnly, strict, autoArgs,
|
||||
evalOnly, outputKind, xmlOutputSourceLocation, e);
|
||||
} else if (files.empty() && !fromArgs)
|
||||
files.push_back("./default.nix");
|
||||
|
@ -186,7 +186,7 @@ int main(int argc, char * * argv)
|
|||
Expr * e = fromArgs
|
||||
? state.parseExprFromString(i, absPath("."))
|
||||
: state.parseExprFromFile(resolveExprPath(lookupFileArg(state, i)));
|
||||
processExpr(store, state, attrPaths, parseOnly, strict, autoArgs,
|
||||
processExpr(state, attrPaths, parseOnly, strict, autoArgs,
|
||||
evalOnly, outputKind, xmlOutputSourceLocation, e);
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ static PathSet realisePath(Path path, bool build = true)
|
|||
Path rootName = gcRoot;
|
||||
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||
if (i->first != "out") rootName += "-" + i->first;
|
||||
outPath = addPermRoot(ref<Store>(store), outPath, rootName, indirectRoot);
|
||||
outPath = store->addPermRoot(outPath, rootName, indirectRoot);
|
||||
}
|
||||
outputs.insert(outPath);
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ static PathSet realisePath(Path path, bool build = true)
|
|||
Path rootName = gcRoot;
|
||||
rootNr++;
|
||||
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||
path = addPermRoot(ref<Store>(store), path, rootName, indirectRoot);
|
||||
path = store->addPermRoot(path, rootName, indirectRoot);
|
||||
}
|
||||
return singleton<PathSet>(path);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue