From 4b9e7f59ca14c3de7b0cfdaebca98fa2639bbbf9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 23 Dec 2005 21:08:42 +0000 Subject: * 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. --- src/nix-store/main.cc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/nix-store/main.cc') diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc index 8bb1b1254365..6f1fab13de36 100644 --- a/src/nix-store/main.cc +++ b/src/nix-store/main.cc @@ -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") -- cgit 1.4.1