Delete paths in a component in topologically sorted order

The outputs of a derivation can refer to each other (even though they
cannot have cycles), so they have to be deleted in the right order.

http://hydra.nixos.org/build/3026118
This commit is contained in:
Eelco Dolstra 2012-09-13 13:08:27 -04:00
parent 31114ec3a5
commit 2923b55f9d

View file

@ -454,6 +454,7 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
is, we can delete the elements of paths only if all referrers is, we can delete the elements of paths only if all referrers
of paths are garbage. */ of paths are garbage. */
PathSet paths, referrers; PathSet paths, referrers;
Paths pathsSorted;
if (isValidPath(path)) { if (isValidPath(path)) {
@ -516,7 +517,8 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
} }
/* The paths are garbage, so delete them. */ /* The paths are garbage, so delete them. */
foreach (PathSet::iterator, i, paths) { pathsSorted = topoSortPaths(*this, paths);
foreach (Paths::iterator, i, pathsSorted) {
if (shouldDelete(state.options.action)) { if (shouldDelete(state.options.action)) {
/* If it's a valid path that's not a regular file or /* If it's a valid path that's not a regular file or