From 0f5da8a83c227879566ed87623617fe195bc6f88 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Feb 2007 16:34:00 +0000 Subject: * Support exportPath() in remote mode. --- src/libstore/remote-store.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/libstore/remote-store.cc') 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)); -- cgit 1.4.1