Implement nar-based addToStore for remote-store
This commit is contained in:
parent
ecba88de93
commit
584f8a62de
3 changed files with 31 additions and 2 deletions
|
@ -345,7 +345,12 @@ Path RemoteStore::queryPathFromHashPart(const string & hashPart)
|
|||
void RemoteStore::addToStore(const ValidPathInfo & info, const std::string & nar,
|
||||
bool repair, bool dontCheckSigs)
|
||||
{
|
||||
throw Error("RemoteStore::addToStore() not implemented");
|
||||
auto conn(connections->get());
|
||||
conn->to << wopAddToStoreNar
|
||||
<< info.path << info.deriver << printHash(info.narHash)
|
||||
<< info.references << info.registrationTime << info.narSize
|
||||
<< info.ultimate << info.sigs << nar << repair << dontCheckSigs;
|
||||
conn->processStderr();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -46,7 +46,8 @@ typedef enum {
|
|||
wopVerifyStore = 35,
|
||||
wopBuildDerivation = 36,
|
||||
wopAddSignatures = 37,
|
||||
wopNarFromPath = 38
|
||||
wopNarFromPath = 38,
|
||||
wopAddToStoreNar = 39
|
||||
} WorkerOp;
|
||||
|
||||
|
||||
|
|
|
@ -579,7 +579,30 @@ static void performOp(ref<LocalStore> store, bool trusted, unsigned int clientVe
|
|||
case wopNarFromPath: {
|
||||
auto path = readStorePath(*store, from);
|
||||
startWork();
|
||||
stopWork();
|
||||
dumpPath(path, to);
|
||||
break;
|
||||
}
|
||||
|
||||
case wopAddToStoreNar: {
|
||||
ValidPathInfo info;
|
||||
info.path = readStorePath(*store, from);
|
||||
info.deriver = readString(from);
|
||||
if (!info.deriver.empty())
|
||||
store->assertStorePath(info.deriver);
|
||||
info.narHash = parseHash(htSHA256, readString(from));
|
||||
info.references = readStorePaths<PathSet>(*store, from);
|
||||
info.registrationTime = readInt(from);
|
||||
info.narSize = readLongLong(from);
|
||||
info.ultimate = readLongLong(from);
|
||||
info.sigs = readStrings<StringSet>(from);
|
||||
auto nar = readString(from);
|
||||
auto repair = readInt(from) ? true : false;
|
||||
auto dontCheckSigs = readInt(from) ? true : false;
|
||||
if (!trusted && dontCheckSigs)
|
||||
dontCheckSigs = false;
|
||||
startWork();
|
||||
store->addToStore(info, nar, repair, dontCheckSigs);
|
||||
stopWork();
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue