Skip to content

Commit

Permalink
Push wopAddToStore old style stream adapters into smaller scopes
Browse files Browse the repository at this point in the history
This doesn't fix the bug, but makes the code less difficult to read.
Also improve the comments, now that it is clear what part is needed in
each code path.
  • Loading branch information
Ericson2314 authored and ElvishJerricco committed Nov 30, 2021
1 parent 946098a commit 2f916ac
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions src/libstore/daemon.cc
Original file line number Diff line number Diff line change
Expand Up @@ -434,19 +434,26 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
}

auto dumpSource = sinkToSource([&](Sink & saved) {
TeeSource savedNARSource(from, saved);
RetrieveRegularNARSink savedRegular { saved };

if (method == FileIngestionMethod::Recursive) {
/* Get the entire NAR dump from the client and save it to
a string so that we can pass it to
addToStoreFromDump(). */
/* We parse the NAR dump through into `saved` unmodified,
so why all this extra work? We still parse the NAR so
that we aren't sending arbitrary data to `saved`
unwittingly`, and we know when the NAR ends so we don't
consume the rest of `from` and can't parse another
command. (We don't trust `addToStoreFromDump` to not
eagerly consume the entire stream it's given, past the
length of the Nar. */
TeeSource savedNARSource(from, saved);
ParseSink sink; /* null sink; just parse the NAR */
parseDump(sink, savedNARSource);
} else
} else {
/* Incrementally parse the NAR file, stripping the
metadata, and streaming the sole file we expect into
`saved`. */
RetrieveRegularNARSink savedRegular { saved };
parseDump(savedRegular, from);

if (!savedRegular.regular) throw Error("regular file expected");
if (!savedRegular.regular) throw Error("regular file expected");
}
});
logger->startWork();
auto path = store->addToStoreFromDump(*dumpSource, baseName, method, hashAlgo);
Expand Down

0 comments on commit 2f916ac

Please sign in to comment.