* Added a flag --ignore-liveness' to nix-store --delete'. It
deletes a path even if it is reachable from a root. However, it won't delete a path that still has referrers (since that would violate store invariants). Don't try this at home. It's a useful hack for recovering from certain situations in a somewhat clean way (e.g., holes in closures due to disk corruption).
This commit is contained in:
parent
4b9e7f59ca
commit
f96d2dea26
3 changed files with 12 additions and 6 deletions
|
|
@ -518,7 +518,7 @@ static void opGC(Strings opFlags, Strings opArgs)
|
|||
|
||||
PathSet result;
|
||||
PrintFreed freed(action == gcDeleteDead);
|
||||
collectGarbage(action, PathSet(), result, freed.bytesFreed);
|
||||
collectGarbage(action, PathSet(), false, result, freed.bytesFreed);
|
||||
|
||||
if (action != gcDeleteDead) {
|
||||
for (PathSet::iterator i = result.begin(); i != result.end(); ++i)
|
||||
|
|
@ -532,7 +532,12 @@ static void opGC(Strings opFlags, Strings opArgs)
|
|||
roots). */
|
||||
static void opDelete(Strings opFlags, Strings opArgs)
|
||||
{
|
||||
if (!opFlags.empty()) throw UsageError("unknown flag");
|
||||
bool ignoreLiveness;
|
||||
|
||||
for (Strings::iterator i = opFlags.begin();
|
||||
i != opFlags.end(); ++i)
|
||||
if (*i == "--ignore-liveness") ignoreLiveness = true;
|
||||
else throw UsageError(format("unknown flag `%1%'") % *i);
|
||||
|
||||
PathSet pathsToDelete;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
|
|
@ -541,7 +546,7 @@ static void opDelete(Strings opFlags, Strings opArgs)
|
|||
|
||||
PathSet dummy;
|
||||
PrintFreed freed(true);
|
||||
collectGarbage(gcDeleteSpecific, pathsToDelete,
|
||||
collectGarbage(gcDeleteSpecific, pathsToDelete, ignoreLiveness,
|
||||
dummy, freed.bytesFreed);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue