about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-03T11·58+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-03T11·58+0200
commita8dfdc52b83eb12f174366aae173c37da66943b6 (patch)
treef2ff3801ddb93e6d1f278c7786603fe3acc39fb6
parent75361b6dcef4c02cf3f9972c0d5a5a2726a1c438 (diff)
parentc87a56f4d01442ee94c0db9e89a89292d44015ae (diff)
Merge pull request #925 from abbradar/master
Show both cycle ends
-rw-r--r--src/libstore/misc.cc10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index 114ab565e08c..3ad93991d9e4 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -169,11 +169,11 @@ Paths Store::topoSortPaths(const PathSet & paths)
     Paths sorted;
     PathSet visited, parents;
 
-    std::function<void(const Path & path)> dfsVisit;
+    std::function<void(const Path & path, const Path * parent)> dfsVisit;
 
-    dfsVisit = [&](const Path & path) {
+    dfsVisit = [&](const Path & path, const Path * parent) {
         if (parents.find(path) != parents.end())
-            throw BuildError(format("cycle detected in the references of ‘%1%’") % path);
+            throw BuildError(format("cycle detected in the references of '%1%' from '%2%'") % path % *parent);
 
         if (visited.find(path) != visited.end()) return;
         visited.insert(path);
@@ -189,14 +189,14 @@ Paths Store::topoSortPaths(const PathSet & paths)
             /* Don't traverse into paths that don't exist.  That can
                happen due to substitutes for non-existent paths. */
             if (i != path && paths.find(i) != paths.end())
-                dfsVisit(i);
+                dfsVisit(i, &path);
 
         sorted.push_front(path);
         parents.erase(path);
     };
 
     for (auto & i : paths)
-        dfsVisit(i);
+        dfsVisit(i, nullptr);
 
     return sorted;
 }