about summary refs log tree commit diff
path: root/src/libstore/gc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/gc.cc')
-rw-r--r--src/libstore/gc.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index 0e0c15934ec5..dc1de48ea605 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -454,6 +454,7 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
        is, we can delete the elements of ‘paths’ only if all referrers
        of ‘paths’ are garbage. */
     PathSet paths, referrers;
+    Paths pathsSorted;
 
     if (isValidPath(path)) {
 
@@ -516,7 +517,8 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
         }
 
     /* 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 it's a valid path that's not a regular file or