aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-06-03 05:23:13 +0300
committerNikolay Amiantov <ab@fmap.me>2016-06-03 14:25:37 +0300
commitc87a56f4d01442ee94c0db9e89a89292d44015ae (patch)
treed247092a8b365f272fdccf827c2fd1b9d441f2ca /src
parentf8a8b4d8f8a694d4eacca52d92b3538dfbdf9b95 (diff)
Show both cycle ends
Diffstat (limited to 'src')
-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 114ab565e..3ad93991d 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;
}