From 6d19c044162d74a95f6bb0379ed4edc8840ec0f6 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Mon, 3 Aug 2020 16:32:15 +0200 Subject: nixos/manual: improve error message for invalid values in `relatedPackages' As reported in NixOS discourse[1], tracking down invalid values in `relatedPackages'[2] (i.e. list-items that don't exist in `pkgs`) is fairly hard as the message "Invalid package attribute path `foobar'" is quite unhelpful and the trace doesn't point to the source of the problem either. This patch improves the error message by mentioning that the issue is an invalid `relatedPackages`-declaration in $optionName. [1] https://discourse.nixos.org/t/invalid-package-attribute-path-nextcloud19/8403/9 [2] https://nixos.org/nixpkgs/manual/#sec-functions-library-options --- nixos/lib/make-options-doc/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nixos/lib') diff --git a/nixos/lib/make-options-doc/default.nix b/nixos/lib/make-options-doc/default.nix index 772b7d3add9..a1161621f0d 100644 --- a/nixos/lib/make-options-doc/default.nix +++ b/nixos/lib/make-options-doc/default.nix @@ -36,7 +36,7 @@ let // lib.optionalAttrs (opt ? example) { example = substFunction opt.example; } // lib.optionalAttrs (opt ? default) { default = substFunction opt.default; } // lib.optionalAttrs (opt ? type) { type = substFunction opt.type; } - // lib.optionalAttrs (opt ? relatedPackages && opt.relatedPackages != []) { relatedPackages = genRelatedPackages opt.relatedPackages; } + // lib.optionalAttrs (opt ? relatedPackages && opt.relatedPackages != []) { relatedPackages = genRelatedPackages opt.relatedPackages opt.name; } ); # Generate DocBook documentation for a list of packages. This is @@ -48,7 +48,7 @@ let # - a list: that will be interpreted as an attribute path from `pkgs`, # - an attrset: that can specify `name`, `path`, `package`, `comment` # (either of `name`, `path` is required, the rest are optional). - genRelatedPackages = packages: + genRelatedPackages = packages: optName: let unpack = p: if lib.isString p then { name = p; } else if lib.isList p then { path = p; } @@ -58,7 +58,7 @@ let title = args.title or null; name = args.name or (lib.concatStringsSep "." args.path); path = args.path or [ args.name ]; - package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs); + package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}' found while evaluating `relatedPackages' of option `${optName}'") pkgs); in "" + "${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})" + lib.optionalString (!package.meta.available) " [UNAVAILABLE]" -- cgit 1.4.1