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
This commit is contained in:
parent
3c155bb20c
commit
6d19c04416
|
@ -36,7 +36,7 @@ let
|
||||||
// lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
|
// lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
|
||||||
// lib.optionalAttrs (opt ? default) { default = substFunction opt.default; }
|
// lib.optionalAttrs (opt ? default) { default = substFunction opt.default; }
|
||||||
// lib.optionalAttrs (opt ? type) { type = substFunction opt.type; }
|
// 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
|
# 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`,
|
# - a list: that will be interpreted as an attribute path from `pkgs`,
|
||||||
# - an attrset: that can specify `name`, `path`, `package`, `comment`
|
# - an attrset: that can specify `name`, `path`, `package`, `comment`
|
||||||
# (either of `name`, `path` is required, the rest are optional).
|
# (either of `name`, `path` is required, the rest are optional).
|
||||||
genRelatedPackages = packages:
|
genRelatedPackages = packages: optName:
|
||||||
let
|
let
|
||||||
unpack = p: if lib.isString p then { name = p; }
|
unpack = p: if lib.isString p then { name = p; }
|
||||||
else if lib.isList p then { path = p; }
|
else if lib.isList p then { path = p; }
|
||||||
|
@ -58,7 +58,7 @@ let
|
||||||
title = args.title or null;
|
title = args.title or null;
|
||||||
name = args.name or (lib.concatStringsSep "." args.path);
|
name = args.name or (lib.concatStringsSep "." args.path);
|
||||||
path = args.path or [ args.name ];
|
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 "<listitem>"
|
in "<listitem>"
|
||||||
+ "<para><literal>${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})</literal>"
|
+ "<para><literal>${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})</literal>"
|
||||||
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
|
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
|
||||||
|
|
Loading…
Reference in a new issue