Move StoreApi::serve into opServe

Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
Shea Levy 2014-02-10 06:52:48 -05:00
parent 1614603165
commit 38c3beac1a
3 changed files with 29 additions and 39 deletions

View file

@ -1,7 +1,6 @@
#include "store-api.hh" #include "store-api.hh"
#include "globals.hh" #include "globals.hh"
#include "util.hh" #include "util.hh"
#include "archive.hh"
#include <climits> #include <climits>
@ -259,39 +258,6 @@ string StoreAPI::makeValidityRegistration(const PathSet & paths,
} }
void StoreAPI::serve(Source & in, BufferedSink & out)
{
string cmd = readString(in);
if (cmd == "query") {
for (cmd = readString(in); !cmd.empty(); cmd = readString(in)) {
PathSet paths = readStrings<PathSet>(in);
if (cmd == "have") {
writeStrings(queryValidPaths(paths), out);
} else if (cmd == "info") {
// !!! Maybe we want a queryPathInfos?
foreach (PathSet::iterator, i, paths) {
if (!isValidPath(*i))
continue;
ValidPathInfo info = queryPathInfo(*i);
writeString(info.path, out);
writeString(info.deriver, out);
writeStrings(info.references, out);
// !!! Maybe we want compression?
writeLongLong(info.narSize, out); // downloadSize
writeLongLong(info.narSize, out);
}
writeString("", out);
} else
throw Error(format("Unknown serve query `%1%'") % cmd);
out.flush();
}
} else if (cmd == "substitute")
dumpPath(readString(in), out);
else
throw Error(format("Unknown serve command `%1%'") % cmd);
}
ValidPathInfo decodeValidPathInfo(std::istream & str, bool hashGiven) ValidPathInfo decodeValidPathInfo(std::istream & str, bool hashGiven)
{ {
ValidPathInfo info; ValidPathInfo info;

View file

@ -248,10 +248,6 @@ public:
`nix-store --register-validity'. */ `nix-store --register-validity'. */
string makeValidityRegistration(const PathSet & paths, string makeValidityRegistration(const PathSet & paths,
bool showDerivers, bool showHash); bool showDerivers, bool showHash);
/* Serve the store for ssh substituters by taking commands
* from in and printing results to out */
void serve(Source & in, BufferedSink & out);
}; };

View file

@ -839,10 +839,38 @@ static void opServe(Strings opFlags, Strings opArgs)
{ {
if (!opArgs.empty() || !opFlags.empty()) if (!opArgs.empty() || !opFlags.empty())
throw UsageError("no arguments or flags expected"); throw UsageError("no arguments or flags expected");
FdSource in(STDIN_FILENO); FdSource in(STDIN_FILENO);
FdSink out(STDOUT_FILENO); FdSink out(STDOUT_FILENO);
store->serve(in, out); string cmd = readString(in);
if (cmd == "query") {
for (cmd = readString(in); !cmd.empty(); cmd = readString(in)) {
PathSet paths = readStrings<PathSet>(in);
if (cmd == "have") {
writeStrings(store->queryValidPaths(paths), out);
} else if (cmd == "info") {
// !!! Maybe we want a queryPathInfos?
foreach (PathSet::iterator, i, paths) {
if (!store->isValidPath(*i))
continue;
ValidPathInfo info = store->queryPathInfo(*i);
writeString(info.path, out);
writeString(info.deriver, out);
writeStrings(info.references, out);
// !!! Maybe we want compression?
writeLongLong(info.narSize, out); // downloadSize
writeLongLong(info.narSize, out);
}
writeString("", out);
} else
throw Error(format("Unknown serve query `%1%'") % cmd);
out.flush();
}
} else if (cmd == "substitute")
dumpPath(readString(in), out);
else
throw Error(format("Unknown serve command `%1%'") % cmd);
} }