* 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:
Eelco Dolstra 2005-12-23 21:36:44 +00:00
parent 4b9e7f59ca
commit f96d2dea26
3 changed files with 12 additions and 6 deletions

View file

@ -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);
}