From 6f5a5ea5ea7fa80bc709c4a2b14ea4395ebe7469 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 13 Feb 2004 10:45:09 +0000 Subject: [PATCH] * Regression fix: realise substitutes and detect cycles. --- src/libstore/normalise.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc index 51f90207e..5c13f04ec 100644 --- a/src/libstore/normalise.cc +++ b/src/libstore/normalise.cc @@ -287,6 +287,12 @@ void ensurePath(const Path & path, PathSet pending) { /* If the path is already valid, we're done. */ if (isValidPath(path)) return; + + if (pending.find(path) != pending.end()) + throw Error(format( + "path `%1%' already being realised (possible substitute cycle?)") + % path); + pending.insert(path); /* Otherwise, try the substitutes. */ Paths subPaths = querySubstitutes(path); @@ -296,7 +302,8 @@ void ensurePath(const Path & path, PathSet pending) { checkInterrupt(); try { - normaliseStoreExpr(*i, pending); + Path nf = normaliseStoreExpr(*i, pending); + realiseClosure(nf, pending); if (isValidPath(path)) return; throw Error(format("substitute failed to produce expected output path")); } catch (Error & e) {