* Revived the old "nix-store --delete" operation that deletes the

specified paths from the Nix store.  However, this operation is
  safe: it refuses to delete anything that the garbage collector
  wouldn't delete.
This commit is contained in:
Eelco Dolstra 2005-12-23 21:08:42 +00:00
parent 3c5619c7e4
commit 4b9e7f59ca
4 changed files with 45 additions and 11 deletions

View file

@ -7,6 +7,7 @@ Operations:
--realise / -r: ensure path validity; if a derivation, ensure that
validity of the outputs
--add / -A: copy a path to the Nix store
--delete: safely delete paths from the Nix store
--query / -q: query information
--register-substitutes: register a substitute expression (dangerous!)

View file

@ -518,7 +518,7 @@ static void opGC(Strings opFlags, Strings opArgs)
PathSet result;
PrintFreed freed(action == gcDeleteDead);
collectGarbage(action, result, freed.bytesFreed);
collectGarbage(action, PathSet(), result, freed.bytesFreed);
if (action != gcDeleteDead) {
for (PathSet::iterator i = result.begin(); i != result.end(); ++i)
@ -527,6 +527,25 @@ static void opGC(Strings opFlags, Strings opArgs)
}
/* Remove paths from the Nix store if possible (i.e., if they do not
have any remaining referrers and are not reachable from any GC
roots). */
static void opDelete(Strings opFlags, Strings opArgs)
{
if (!opFlags.empty()) throw UsageError("unknown flag");
PathSet pathsToDelete;
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); ++i)
pathsToDelete.insert(fixPath(*i));
PathSet dummy;
PrintFreed freed(true);
collectGarbage(gcDeleteSpecific, pathsToDelete,
dummy, freed.bytesFreed);
}
/* A sink that writes dump output to stdout. */
struct StdoutSink : DumpSink
{
@ -621,6 +640,8 @@ void run(Strings args)
op = opAddFixed;
else if (arg == "--print-fixed-path")
op = opPrintFixedPath;
else if (arg == "--delete")
op = opDelete;
else if (arg == "--query" || arg == "-q")
op = opQuery;
else if (arg == "--register-substitutes")