libstore: remove a sinkToSouce from old daemon protocol
this doesn't have a test because this code path is only reached by
clients that predate 2.4, and we really should not be caring about
those any more right now. even the test suite doesn't, and the few
tests that might care are disabled because they will not even work
Change-Id: Id9eb190065138fedb2c7d90c328ff9eb9d97385b
This commit is contained in:
parent
4ec87742a1
commit
5271424d14
|
@ -453,7 +453,7 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
hashAlgo = parseHashType(hashAlgoRaw);
|
hashAlgo = parseHashType(hashAlgoRaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto dumpSource = sinkToSource([&](Sink & saved) {
|
GeneratorSource dumpSource{[&]() -> WireFormatGenerator {
|
||||||
if (method == FileIngestionMethod::Recursive) {
|
if (method == FileIngestionMethod::Recursive) {
|
||||||
/* We parse the NAR dump through into `saved` unmodified,
|
/* We parse the NAR dump through into `saved` unmodified,
|
||||||
so why all this extra work? We still parse the NAR so
|
so why all this extra work? We still parse the NAR so
|
||||||
|
@ -463,18 +463,35 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
command. (We don't trust `addToStoreFromDump` to not
|
command. (We don't trust `addToStoreFromDump` to not
|
||||||
eagerly consume the entire stream it's given, past the
|
eagerly consume the entire stream it's given, past the
|
||||||
length of the Nar. */
|
length of the Nar. */
|
||||||
saved << copyNAR(from);
|
co_yield copyNAR(from);
|
||||||
} else {
|
} else {
|
||||||
/* Incrementally parse the NAR file, stripping the
|
/* Incrementally parse the NAR file, stripping the
|
||||||
metadata, and streaming the sole file we expect into
|
metadata, and streaming the sole file we expect into
|
||||||
`saved`. */
|
`saved`. */
|
||||||
RetrieveRegularNARSink savedRegular { saved };
|
auto parser = nar::parse(from);
|
||||||
parseDump(savedRegular, from);
|
nar::File * file = nullptr;
|
||||||
if (!savedRegular.regular) throw Error("regular file expected");
|
while (auto entry = parser.next()) {
|
||||||
|
file = std::visit(
|
||||||
|
overloaded{
|
||||||
|
[](nar::MetadataString) -> nar::File * { return nullptr; },
|
||||||
|
[](nar::MetadataRaw) -> nar::File * { return nullptr; },
|
||||||
|
[](nar::File & f) -> nar::File * { return &f; },
|
||||||
|
[](auto &) -> nar::File * { throw Error("regular file expected"); },
|
||||||
|
},
|
||||||
|
*entry
|
||||||
|
);
|
||||||
|
if (file) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!file) {
|
||||||
|
throw Error("regular file expected");
|
||||||
|
}
|
||||||
|
co_yield std::move(file->contents);
|
||||||
}
|
}
|
||||||
});
|
}()};
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
auto path = store->addToStoreFromDump(*dumpSource, baseName, method, hashAlgo);
|
auto path = store->addToStoreFromDump(dumpSource, baseName, method, hashAlgo);
|
||||||
logger->stopWork();
|
logger->stopWork();
|
||||||
|
|
||||||
to << store->printStorePath(path);
|
to << store->printStorePath(path);
|
||||||
|
|
Loading…
Reference in a new issue