mirror of
https://github.com/NixOS/nix
synced 2025-07-06 09:11:47 +02:00
nix-copy-closure -s: Do substitutions via ‘nix-store --serve’
This means we no longer need an SSH master connection, since we only execute a single command on the remote host.
This commit is contained in:
parent
7c3a5090bf
commit
7bb632b024
4 changed files with 43 additions and 11 deletions
|
@ -896,16 +896,42 @@ static void opServe(Strings opFlags, Strings opArgs)
|
|||
}
|
||||
|
||||
switch (cmd) {
|
||||
|
||||
case cmdQueryValidPaths: {
|
||||
bool lock = readInt(in);
|
||||
bool substitute = readInt(in);
|
||||
PathSet paths = readStorePaths<PathSet>(in);
|
||||
if (lock && writeAllowed)
|
||||
for (auto & path : paths)
|
||||
store->addTempRoot(path);
|
||||
|
||||
/* If requested, substitute missing paths. This
|
||||
implements nix-copy-closure's --use-substitutes
|
||||
flag. */
|
||||
if (substitute && writeAllowed) {
|
||||
/* Filter out .drv files (we don't want to build anything). */
|
||||
PathSet paths2;
|
||||
for (auto & path : paths)
|
||||
if (!isDerivation(path)) paths2.insert(path);
|
||||
unsigned long long downloadSize, narSize;
|
||||
PathSet willBuild, willSubstitute, unknown;
|
||||
queryMissing(*store, PathSet(paths2.begin(), paths2.end()),
|
||||
willBuild, willSubstitute, unknown, downloadSize, narSize);
|
||||
/* FIXME: should use ensurePath(), but it only
|
||||
does one path at a time. */
|
||||
if (!willSubstitute.empty())
|
||||
try {
|
||||
store->buildPaths(willSubstitute);
|
||||
} catch (Error & e) {
|
||||
printMsg(lvlError, format("warning: %1%") % e.msg());
|
||||
}
|
||||
}
|
||||
|
||||
writeStrings(store->queryValidPaths(paths), out);
|
||||
out.flush();
|
||||
break;
|
||||
}
|
||||
|
||||
case cmdQueryPathInfos: {
|
||||
PathSet paths = readStorePaths<PathSet>(in);
|
||||
// !!! Maybe we want a queryPathInfos?
|
||||
|
@ -924,10 +950,12 @@ static void opServe(Strings opFlags, Strings opArgs)
|
|||
out.flush();
|
||||
break;
|
||||
}
|
||||
|
||||
case cmdDumpStorePath:
|
||||
dumpPath(readStorePath(in), out);
|
||||
out.flush();
|
||||
break;
|
||||
|
||||
case cmdImportPaths: {
|
||||
if (!writeAllowed) throw Error("importing paths not allowed");
|
||||
string compression = readString(in);
|
||||
|
@ -966,6 +994,7 @@ static void opServe(Strings opFlags, Strings opArgs)
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw Error(format("unknown serve command %1%") % cmd);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue