diff options
Diffstat (limited to 'src/nix-worker/nix-worker.cc')
-rw-r--r-- | src/nix-worker/nix-worker.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/nix-worker/nix-worker.cc b/src/nix-worker/nix-worker.cc index 17fbbf264..04578a8b8 100644 --- a/src/nix-worker/nix-worker.cc +++ b/src/nix-worker/nix-worker.cc @@ -178,6 +178,21 @@ static void stopWork(bool success = true, const string & msg = "") } +struct TunnelSink : Sink +{ + Sink & to; + TunnelSink(Sink & to) : to(to) + { + } + virtual void operator () + (const unsigned char * data, unsigned int len) + { + writeInt(STDERR_DATA, to); + writeString(string((const char *) data, len), to); + } +}; + + static void performOp(Source & from, Sink & to, unsigned int op) { switch (op) { @@ -263,6 +278,17 @@ static void performOp(Source & from, Sink & to, unsigned int op) break; } + case wopExportPath: { + Path path = readStorePath(from); + bool sign = readInt(from) == 1; + startWork(); + TunnelSink sink(to); + store->exportPath(path, sign, sink); + stopWork(); + writeInt(1, to); + break; + } + case wopBuildDerivations: { PathSet drvs = readStorePaths(from); startWork(); |