* 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:
parent
3c5619c7e4
commit
4b9e7f59ca
4 changed files with 45 additions and 11 deletions
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue