Move StoreApi::serve into opServe
Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
parent
1614603165
commit
38c3beac1a
3 changed files with 29 additions and 39 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue