daemon: Factorize substituter agent spawning.
* nix/libstore/local-store.hh (class LocalStore)[substituter]: New method. [runningSubstituter]: Turn into a shared_ptr. * nix/libstore/local-store.cc (LocalStore::querySubstitutablePaths): Call 'substituter' instead of using inline code. (LocalStore::querySubstitutablePathInfos): Likewise. (LocalStore::substituter): New method.master
parent
79c6614f58
commit
a618a8c620
|
@ -850,14 +850,7 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet & paths)
|
|||
|
||||
if (!settings.useSubstitutes || paths.empty()) return res;
|
||||
|
||||
if (!runningSubstituter) {
|
||||
const Strings args = { "substitute", "--query" };
|
||||
const std::map<string, string> env = { { "_NIX_OPTIONS", settings.pack() } };
|
||||
std::unique_ptr<Agent> fresh(new Agent(settings.guixProgram, args, env));
|
||||
runningSubstituter.swap(fresh);
|
||||
}
|
||||
|
||||
Agent & run = *runningSubstituter;
|
||||
Agent & run = *substituter();
|
||||
|
||||
string s = "have ";
|
||||
foreach (PathSet::const_iterator, j, paths)
|
||||
|
@ -877,18 +870,22 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet & paths)
|
|||
}
|
||||
|
||||
|
||||
std::shared_ptr<Agent> LocalStore::substituter()
|
||||
{
|
||||
if (!runningSubstituter) {
|
||||
const Strings args = { "substitute", "--query" };
|
||||
const std::map<string, string> env = { { "_NIX_OPTIONS", settings.pack() } };
|
||||
runningSubstituter = std::make_shared<Agent>(settings.guixProgram, args, env);
|
||||
}
|
||||
|
||||
return runningSubstituter;
|
||||
}
|
||||
|
||||
void LocalStore::querySubstitutablePathInfos(PathSet & paths, SubstitutablePathInfos & infos)
|
||||
{
|
||||
if (!settings.useSubstitutes) return;
|
||||
|
||||
if (!runningSubstituter) {
|
||||
const Strings args = { "substitute", "--query" };
|
||||
const std::map<string, string> env = { { "_NIX_OPTIONS", settings.pack() } };
|
||||
std::unique_ptr<Agent> fresh(new Agent(settings.guixProgram, args, env));
|
||||
runningSubstituter.swap(fresh);
|
||||
}
|
||||
|
||||
Agent & run = *runningSubstituter;
|
||||
Agent & run = *substituter();
|
||||
|
||||
string s = "info ";
|
||||
foreach (PathSet::const_iterator, i, paths)
|
||||
|
|
|
@ -42,7 +42,10 @@ class LocalStore : public StoreAPI
|
|||
{
|
||||
private:
|
||||
/* The currently running substituter or empty. */
|
||||
std::unique_ptr<Agent> runningSubstituter;
|
||||
std::shared_ptr<Agent> runningSubstituter;
|
||||
|
||||
/* Ensure the substituter is running and return it. */
|
||||
std::shared_ptr<Agent> substituter();
|
||||
|
||||
Path linksDir;
|
||||
|
||||
|
|
Reference in New Issue