From 608b0265e104b4a97f51e5745b1a32078770f3cf Mon Sep 17 00:00:00 2001 From: Dan Peebles Date: Sat, 16 Apr 2016 19:58:26 -0400 Subject: Print out all bad references/requisites at once Also updates tests to check for new information. Fixes #799 --- src/libstore/build.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/libstore/build.cc') diff --git a/src/libstore/build.cc b/src/libstore/build.cc index ba3f3a371d8c..4b1c177fe27b 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -2775,14 +2775,25 @@ void DerivationGoal::registerOutputs() } else used = references; + PathSet badPaths; + for (auto & i : used) if (allowed) { if (spec.find(i) == spec.end()) - throw BuildError(format("output ‘%1%’ is not allowed to refer to path ‘%2%’") % actualPath % i); + badPaths.insert(i); } else { if (spec.find(i) != spec.end()) - throw BuildError(format("output ‘%1%’ is not allowed to refer to path ‘%2%’") % actualPath % i); + badPaths.insert(i); + } + + if (!badPaths.empty()) { + string badPathsStr; + for (auto & i : badPaths) { + badPathsStr += "\n\t"; + badPathsStr += i; } + throw BuildError(format("output ‘%1%’ is not allowed to refer to the following paths:%2%") % actualPath % badPathsStr); + } }; checkRefs("allowedReferences", true, false); -- cgit 1.4.1