Implement backwards-compatible RemoteStore::addToStore()
The SSHStore PR adds this functionality to the daemon, but we have to handle the case where the Nix daemon is 1.11. Also, don't require signatures for trusted users. This restores 1.11 behaviour. Fixes https://github.com/NixOS/hydra/issues/398.
This commit is contained in:
parent
a83b10f84c
commit
21c55ab3b5
3 changed files with 25 additions and 3 deletions
|
@ -25,7 +25,7 @@ let
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[ curl bison flex perl libxml2 libxslt bzip2 xz
|
[ curl bison flex perl libxml2 libxslt bzip2 xz
|
||||||
pkgconfig sqlite libsodium
|
pkgconfig sqlite libsodium boehmgc
|
||||||
docbook5 docbook5_xsl
|
docbook5 docbook5_xsl
|
||||||
autoconf-archive
|
autoconf-archive
|
||||||
] ++ lib.optional (!lib.inNixShell) git;
|
] ++ lib.optional (!lib.inNixShell) git;
|
||||||
|
@ -34,6 +34,7 @@ let
|
||||||
--with-dbi=${perlPackages.DBI}/${perl.libPrefix}
|
--with-dbi=${perlPackages.DBI}/${perl.libPrefix}
|
||||||
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}
|
--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}
|
||||||
--with-www-curl=${perlPackages.WWWCurl}/${perl.libPrefix}
|
--with-www-curl=${perlPackages.WWWCurl}/${perl.libPrefix}
|
||||||
|
--enable-gc
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postUnpack = ''
|
postUnpack = ''
|
||||||
|
|
|
@ -335,7 +335,28 @@ Path RemoteStore::queryPathFromHashPart(const string & hashPart)
|
||||||
void RemoteStore::addToStore(const ValidPathInfo & info, const ref<std::string> & nar,
|
void RemoteStore::addToStore(const ValidPathInfo & info, const ref<std::string> & nar,
|
||||||
bool repair, bool dontCheckSigs, std::shared_ptr<FSAccessor> accessor)
|
bool repair, bool dontCheckSigs, std::shared_ptr<FSAccessor> accessor)
|
||||||
{
|
{
|
||||||
throw Error("RemoteStore::addToStore() not implemented");
|
auto conn(connections->get());
|
||||||
|
conn->to << wopImportPaths;
|
||||||
|
|
||||||
|
StringSink sink;
|
||||||
|
sink << 1 // == path follows
|
||||||
|
;
|
||||||
|
assert(nar->size() % 8 == 0);
|
||||||
|
sink((unsigned char *) nar->data(), nar->size());
|
||||||
|
sink
|
||||||
|
<< exportMagic
|
||||||
|
<< info.path
|
||||||
|
<< info.references
|
||||||
|
<< info.deriver
|
||||||
|
<< 0 // == no legacy signature
|
||||||
|
<< 0 // == no path follows
|
||||||
|
;
|
||||||
|
|
||||||
|
StringSource source(*sink.s);
|
||||||
|
conn->processStderr(0, &source);
|
||||||
|
|
||||||
|
auto importedPaths = readStorePaths<PathSet>(*this, conn->from);
|
||||||
|
assert(importedPaths.size() <= 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -324,7 +324,7 @@ static void performOp(ref<LocalStore> store, bool trusted, unsigned int clientVe
|
||||||
case wopImportPaths: {
|
case wopImportPaths: {
|
||||||
startWork();
|
startWork();
|
||||||
TunnelSource source(from);
|
TunnelSource source(from);
|
||||||
Paths paths = store->importPaths(source, 0);
|
Paths paths = store->importPaths(source, 0, trusted);
|
||||||
stopWork();
|
stopWork();
|
||||||
to << paths;
|
to << paths;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue