aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/remote-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-12-05 02:18:46 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-12-05 02:18:46 +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 6ddbb3e2a..504eb5232 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;