diff options
Diffstat (limited to 'src/libstore/remote-store.cc')
-rw-r--r-- | src/libstore/remote-store.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc index 801df58ad9fe..dbeb7cf1227f 100644 --- a/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -246,7 +246,11 @@ Path RemoteStore::addTextToStore(const string & suffix, const string & s, void RemoteStore::exportPath(const Path & path, bool sign, Sink & sink) { - throw Error("not implemented"); + writeInt(wopExportPath, to); + writeString(path, to); + writeInt(sign ? 1 : 0, to); + processStderr(&sink); /* sink receives the actual data */ + readInt(from); } @@ -336,12 +340,16 @@ void RemoteStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, } -void RemoteStore::processStderr() +void RemoteStore::processStderr(Sink * sink) { unsigned int msg; - while ((msg = readInt(from)) == STDERR_NEXT) { + while ((msg = readInt(from)) == STDERR_NEXT || msg == STDERR_DATA) { string s = readString(from); - writeToStderr((unsigned char *) s.c_str(), s.size()); + if (msg == STDERR_DATA) { + if (!sink) throw Error("no sink"); + (*sink)((const unsigned char *) s.c_str(), s.size()); + } + else writeToStderr((const unsigned char *) s.c_str(), s.size()); } if (msg == STDERR_ERROR) throw Error(readString(from)); |