diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-05T02·18+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-05T02·18+0000 |
commit | a9c4f66cfb1618833cc70ceaf13733730b634193 (patch) | |
tree | 47d3b9aab72f561e2e15f18b8ad415153bfd56ef /src/libstore/remote-store.cc | |
parent | 29cf434a35d82529f56c085c9cd50858c148d086 (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.cc | 21 |
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; |