From c87a56f4d01442ee94c0db9e89a89292d44015ae Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Fri, 3 Jun 2016 05:23:13 +0300 Subject: [PATCH] Show both cycle ends --- src/libstore/misc.cc | 10 +++++----- 1 file 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 dfsVisit; + std::function 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; }