aboutsummaryrefslogtreecommitdiff
path: root/src/nix/flake.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-05-29 20:57:08 +0200
committerEelco Dolstra <edolstra@gmail.com>2019-05-29 20:57:08 +0200
commit0e32b32fa3655e8a3e028ebb5ac838164a606132 (patch)
tree60229147cf96acd19940c6ec5adbd9cde20a9718 /src/nix/flake.cc
parente0aaf05f4fde3096a86c6481ada64aae53bfce93 (diff)
nix flake check: Check defaultPackage, devShell and packages
Diffstat (limited to 'src/nix/flake.cc')
-rw-r--r--src/nix/flake.cc38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index f0231e263..19e97aed9 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -262,6 +262,19 @@ struct CmdFlakeCheck : FlakeCommand, MixJSON
auto state = getEvalState();
auto flake = resolveFlake();
+ auto checkDerivation = [&](const std::string & attrPath, Value & v) {
+ try {
+ auto drvInfo = getDerivation(*state, v, false);
+ if (!drvInfo)
+ throw Error("flake attribute '%s' is not a derivation", attrPath);
+ // FIXME: check meta attributes
+ return drvInfo->queryDrvPath();
+ } catch (Error & e) {
+ e.addPrefix(fmt("while checking flake attribute '" ANSI_BOLD "%s" ANSI_NORMAL "':\n", attrPath));
+ throw;
+ }
+ };
+
PathSet drvPaths;
{
@@ -281,20 +294,21 @@ struct CmdFlakeCheck : FlakeCommand, MixJSON
if (name == "checks") {
state->forceAttrs(vProvide);
- for (auto & aCheck : *vProvide.attrs) {
- try {
- auto drvInfo = getDerivation(*state, *aCheck.value, false);
- if (!drvInfo)
- throw Error("flake output 'check.%s' is not a derivation", aCheck.name);
- drvPaths.insert(drvInfo->queryDrvPath());
- // FIXME: check meta attributes?
- } catch (Error & e) {
- e.addPrefix(fmt("while checking flake check '" ANSI_BOLD "%s" ANSI_NORMAL "':\n", aCheck.name));
- throw;
- }
- }
+ for (auto & aCheck : *vProvide.attrs)
+ drvPaths.insert(checkDerivation(
+ name + "." + (std::string) aCheck.name, *aCheck.value));
+ }
+
+ else if (name == "packages") {
+ state->forceAttrs(vProvide);
+ for (auto & aCheck : *vProvide.attrs)
+ checkDerivation(
+ name + "." + (std::string) aCheck.name, *aCheck.value);
}
+ else if (name == "defaultPackage" || name == "devShell")
+ checkDerivation(name, vProvide);
+
} catch (Error & e) {
e.addPrefix(fmt("while checking flake output '" ANSI_BOLD "%s" ANSI_NORMAL "':\n", name));
throw;