summary refs log tree commit diff
path: root/pkgs/stdenv/generic/check-meta.nix
diff options
context:
space:
mode:
authorGraham Christensen <graham@grahamc.com>2017-12-12 18:06:55 -0500
committerGraham Christensen <graham@grahamc.com>2017-12-12 18:08:11 -0500
commitf33a513d2b1f07da28549ffb7067f913bb3e302a (patch)
treea0a1c2e6660ad10647149b93c6c7ed4ef72d7498 /pkgs/stdenv/generic/check-meta.nix
parent3a110ea3f96db56012f7f2707e842593a7d7c5b8 (diff)
downloadnixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar.gz
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar.bz2
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar.lz
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar.xz
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.tar.zst
nixlib-f33a513d2b1f07da28549ffb7067f913bb3e302a.zip
stdenv: allow specifying a eval issuee handler
Diffstat (limited to 'pkgs/stdenv/generic/check-meta.nix')
-rw-r--r--pkgs/stdenv/generic/check-meta.nix17
1 files changed, 12 insertions, 5 deletions
diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix
index 7c2206473688..3fe12d0826d9 100644
--- a/pkgs/stdenv/generic/check-meta.nix
+++ b/pkgs/stdenv/generic/check-meta.nix
@@ -125,11 +125,18 @@ let
 
       '';
 
-  throwEvalHelp = { reason , errormsg ? "" }:
-    (if reason != "unknown-meta" then throw else (x : builtins.trace x true)) (''
-      Package ‘${attrs.name or "«name-missing»"}’ in ${pos_str} ${errormsg}, refusing to evaluate.
+  handleEvalIssue = { reason , errormsg ? "" }:
+    let
+      msg = ''
+        Package ‘${attrs.name or "«name-missing»"}’ in ${pos_str} ${errormsg}, refusing to evaluate.
+
+      '' + (builtins.getAttr reason remediation) attrs;
+
+      handler = if config ? "handleEvalIssue"
+        then config.handleEvalIssue reason
+        else throw;
+    in handler msg;
 
-      '' + ((builtins.getAttr reason remediation) attrs));
 
   metaTypes = with lib.types; rec {
     # These keys are documented
@@ -192,7 +199,7 @@ let
   validityCondition =
          let v = checkValidity attrs;
          in if !v.valid
-           then throwEvalHelp (removeAttrs v ["valid"])
+           then handleEvalIssue (removeAttrs v ["valid"])
            else true;
 
 in