about summary refs log tree commit diff
path: root/src/libstore/remote-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-12-05T02·18+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-12-05T02·18+0000
commita9c4f66cfb1618833cc70ceaf13733730b634193 (patch)
tree47d3b9aab72f561e2e15f18b8ad415153bfd56ef /src/libstore/remote-store.cc
parent29cf434a35d82529f56c085c9cd50858c148d086 (diff)
* Allow unprivileged users to run the garbage collector and to do
  `nix-store --delete'.  But unprivileged users are not allowed to
  ignore liveness.
* `nix-store --delete --ignore-liveness': ignore the runtime roots as
  well.

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;