RemoteStore::addToStore(): Send NAR rather than string containing NAR

This allows the NAR to be streamed in the future (though we're not
doing that yet).
This commit is contained in:
Eelco Dolstra 2017-03-01 16:07:15 +01:00
parent 374908726b
commit f61f67ddee
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
5 changed files with 21 additions and 37 deletions

View file

@ -61,27 +61,6 @@ void Store::exportPath(const Path & path, Sink & sink)
hashAndWriteSink << exportMagic << path << info->references << info->deriver << 0;
}
struct TeeSource : Source
{
Source & readSource;
ref<std::string> data;
TeeSource(Source & readSource)
: readSource(readSource)
, data(make_ref<std::string>())
{
}
size_t read(unsigned char * data, size_t len)
{
size_t n = readSource.read(data, len);
this->data->append((char *) data, n);
return n;
}
};
struct NopSink : ParseSink
{
};
Paths Store::importPaths(Source & source, std::shared_ptr<FSAccessor> accessor, bool dontCheckSigs)
{
Paths res;
@ -92,7 +71,7 @@ Paths Store::importPaths(Source & source, std::shared_ptr<FSAccessor> accessor,
/* Extract the NAR from the source. */
TeeSource tee(source);
NopSink sink;
ParseSink sink;
parseDump(sink, tee);
uint32_t magic = readInt(source);

View file

@ -169,9 +169,9 @@ struct LegacySSHStore : public Store
/* FIXME: inefficient. */
ParseSink parseSink; /* null sink; just parse the NAR */
SavingSourceAdapter savedNAR(conn->from);
TeeSource savedNAR(conn->from);
parseDump(parseSink, savedNAR);
sink(savedNAR.s);
sink(*savedNAR.data);
}
/* Unsupported methods. */

View file

@ -378,8 +378,9 @@ void RemoteStore::addToStore(const ValidPathInfo & info, const ref<std::string>
conn->to << wopAddToStoreNar
<< info.path << info.deriver << printHash(info.narHash)
<< info.references << info.registrationTime << info.narSize
<< info.ultimate << info.sigs << info.ca << *nar << repair << dontCheckSigs;
// FIXME: don't send nar as a string
<< info.ultimate << info.sigs << info.ca
<< repair << dontCheckSigs;
conn->to(*nar);
conn->processStderr();
}
}