diff options
author | Nikolay Amiantov <ab@fmap.me> | 2016-06-03T02·23+0300 |
---|---|---|
committer | Nikolay Amiantov <ab@fmap.me> | 2016-06-03T11·25+0300 |
commit | c87a56f4d01442ee94c0db9e89a89292d44015ae (patch) | |
tree | d247092a8b365f272fdccf827c2fd1b9d441f2ca | |
parent | f8a8b4d8f8a694d4eacca52d92b3538dfbdf9b95 (diff) |
Show both cycle ends
-rw-r--r-- | src/libstore/misc.cc | 10 |
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; } |