about summary refs log tree commit diff
path: root/src/libstore/remote-store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/remote-store.cc')
-rw-r--r--src/libstore/remote-store.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 6ddbb3e2a260..504eb52329a6 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -302,6 +302,27 @@ Roots RemoteStore::findRoots()
 }
 
 
+void RemoteStore::collectGarbage(GCAction action, const PathSet & pathsToDelete,
+    bool ignoreLiveness, PathSet & result, unsigned long long & bytesFreed)
+{
+    result.clear();
+    bytesFreed = 0;
+    writeInt(wopCollectGarbage, to);
+    writeInt(action, to);
+    writeStringSet(pathsToDelete, to);
+    writeInt(ignoreLiveness, to);
+    
+    processStderr();
+    
+    result = readStringSet(from);
+
+    /* Ugh - NAR integers are 64 bits, but read/writeInt() aren't. */
+    unsigned int lo = readInt(from);
+    unsigned int hi = readInt(from);
+    bytesFreed = (((unsigned long long) hi) << 32) | lo;
+}
+
+
 void RemoteStore::processStderr()
 {
     unsigned int msg;