-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix #5299 and remove uncesssary unbounded buffer #5696
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -431,25 +431,30 @@ static void performOp(TunnelLogger * logger, ref<Store> store, | |
hashAlgo = parseHashType(hashAlgoRaw); | ||
} | ||
|
||
StringSink 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(). */ | ||
ParseSink sink; /* null sink; just parse the NAR */ | ||
parseDump(sink, savedNARSource); | ||
} else | ||
parseDump(savedRegular, from); | ||
|
||
auto dumpSource = sinkToSource([&](Sink & saved) { | ||
if (method == FileIngestionMethod::Recursive) { | ||
/* 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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
(Seems like stray backtick?)
This was confusing to me on first read, I want to suggest "and so that we know when the NAR". But then that's a lot of "so"s in a row. Writing is hard haha. |
||
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. */ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Nar -> NAR? (for consistency's sake?) Also, the paren here is unmatched/missing end paren. |
||
TeeSource savedNARSource(from, saved); | ||
ParseSink sink; /* null sink; just parse the NAR */ | ||
parseDump(sink, savedNARSource); | ||
} 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"); | ||
} | ||
}); | ||
logger->startWork(); | ||
if (!savedRegular.regular) throw Error("regular file expected"); | ||
|
||
// FIXME: try to stream directly from `from`. | ||
StringSource dumpSource { *saved.s }; | ||
auto path = store->addToStoreFromDump(dumpSource, baseName, method, hashAlgo); | ||
auto path = store->addToStoreFromDump(*dumpSource, baseName, method, hashAlgo); | ||
logger->stopWork(); | ||
|
||
to << store->printStorePath(path); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
was "We pass the NAR dump" meant instead?
I mean yes we parse it too, but it seems that's the part we're explaining is why we're parsing despite passing it through unmodified. Wouldn't bring it up but there are few other fixups...