diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2020-07-21 01:20:53 +0000 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2020-07-21 01:20:53 +0000 |
commit | 5055c595bd08c7aea494767d309645e8f3ef6f3d (patch) | |
tree | e15710d689799e53633837eea007a3bb2bd814e2 /src/libutil | |
parent | 362ae93851830ecce6ade70462fe991cc522d27b (diff) | |
parent | 9aae179f34ec2f38167585c07f18a8ab8acefafb (diff) |
Merge branch 'fix-and-document-addToStoreSlow' of github.com:obsidiansystems/nix into ca-derivation-data-types
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/archive.hh | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/libutil/archive.hh b/src/libutil/archive.hh index 302b1bb18..57780d16a 100644 --- a/src/libutil/archive.hh +++ b/src/libutil/archive.hh @@ -63,12 +63,29 @@ struct ParseSink virtual void createSymlink(const Path & path, const string & target) { }; }; -struct TeeParseSink : ParseSink +/* If the NAR archive contains a single file at top-level, then save + the contents of the file to `s'. Otherwise barf. */ +struct RetrieveRegularNARSink : ParseSink { - StringSink saved; - TeeSource source; + bool regular = true; + Sink & sink; - TeeParseSink(Source & source) : source(source, saved) { } + RetrieveRegularNARSink(Sink & sink) : sink(sink) { } + + void createDirectory(const Path & path) + { + regular = false; + } + + void receiveContents(unsigned char * data, unsigned int len) + { + sink(data, len); + } + + void createSymlink(const Path & path, const string & target) + { + regular = false; + } }; void parseDump(ParseSink & sink, Source & source); |