diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2023-03-27 05:46:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-27 05:46:49 +0200 |
commit | 9e7940e35d4476c23c67836fafec601a1e7e3c9e (patch) | |
tree | 4a25983563512356e05e528e96acc0a88987048a /src/nix | |
parent | e00abd3f566b16bb107d513925cf33b40cca35f4 (diff) | |
parent | 6b87c6577f2d30e495061de6872e9333e2f65881 (diff) |
Merge pull request #8109 from oxalica/fix/show-legacy-packages
Catch eval errors in `hasContent`
Diffstat (limited to 'src/nix')
-rw-r--r-- | src/nix/flake.cc | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/src/nix/flake.cc b/src/nix/flake.cc index 0a6616396..df19e87e4 100644 --- a/src/nix/flake.cc +++ b/src/nix/flake.cc @@ -1026,36 +1026,43 @@ struct CmdFlakeShow : FlakeCommand, MixJSON auto visitor2 = visitor.getAttr(attrName); - if ((attrPathS[0] == "apps" - || attrPathS[0] == "checks" - || attrPathS[0] == "devShells" - || attrPathS[0] == "legacyPackages" - || attrPathS[0] == "packages") - && (attrPathS.size() == 1 || attrPathS.size() == 2)) { - for (const auto &subAttr : visitor2->getAttrs()) { - if (hasContent(*visitor2, attrPath2, subAttr)) { - return true; + try { + if ((attrPathS[0] == "apps" + || attrPathS[0] == "checks" + || attrPathS[0] == "devShells" + || attrPathS[0] == "legacyPackages" + || attrPathS[0] == "packages") + && (attrPathS.size() == 1 || attrPathS.size() == 2)) { + for (const auto &subAttr : visitor2->getAttrs()) { + if (hasContent(*visitor2, attrPath2, subAttr)) { + return true; + } } + return false; } - return false; - } - if ((attrPathS.size() == 1) - && (attrPathS[0] == "formatter" - || attrPathS[0] == "nixosConfigurations" - || attrPathS[0] == "nixosModules" - || attrPathS[0] == "overlays" - )) { - for (const auto &subAttr : visitor2->getAttrs()) { - if (hasContent(*visitor2, attrPath2, subAttr)) { - return true; + if ((attrPathS.size() == 1) + && (attrPathS[0] == "formatter" + || attrPathS[0] == "nixosConfigurations" + || attrPathS[0] == "nixosModules" + || attrPathS[0] == "overlays" + )) { + for (const auto &subAttr : visitor2->getAttrs()) { + if (hasContent(*visitor2, attrPath2, subAttr)) { + return true; + } } + return false; } - return false; - } - // If we don't recognize it, it's probably content - return true; + // If we don't recognize it, it's probably content + return true; + } catch (EvalError & e) { + // Some attrs may contain errors, eg. legacyPackages of + // nixpkgs. We still want to recurse into it, instead of + // skipping it at all. + return true; + } }; std::function<nlohmann::json( |