From 444a5231810e2575bb8955bca6492ef73e4388d5 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sat, 2 Nov 2024 18:25:48 +0100 Subject: fix(lib/maybeMerge): Actually output a warning if things will be overridden --- lib/default.nix | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'lib') diff --git a/lib/default.nix b/lib/default.nix index 7c86aba1..dfa9fb17 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,4 +1,7 @@ {}: let + # string -> string -> string + colorize = color: string: "[${color}m${string}"; + # Taken from `nixpkgs/lib`. # Is here to avoid a dependency on `lib` (making this file easy to test with `nix eval`) warn = @@ -9,13 +12,13 @@ msg: v: # `builtins.warn` requires a string message, so we enforce that in our implementation, so that callers aren't accidentally incompatible with newer Nix versions. assert builtins.isString msg; - builtins.trace "evaluation warning: ${msg}" v + builtins.trace "${colorize "1;35" "evaluation warning:"} ${msg}" v ); in { mkByName = import ./by-name-overlay.nix {inherit warn;}; # Only merge two attrsets if the RHS does not share names with the LHS. - # Example: + # # Example: # ```nix # let # attr1 = {atuin = "first"; default = "second";}; @@ -23,15 +26,17 @@ in { # in # maybeMerge attr1 attr2 "Failed to merge" # ``` - maybeMerge = attr1: attr2: message: let - list1 = builtins.attrNames attr1; - - check = name2: value: - if builtins.elem name2 list1 - then warn "Overriding ${name2} while merging two attrs sets: ${message}" value - else value; - - checkedAttr2 = builtins.mapAttrs check attr2; + # # Type: + # {} -> {} -> string -> {} + maybeMerge = lhs: rhs: sourceSet: let + overridden = builtins.intersectAttrs lhs rhs; + merged = lhs // rhs; + mkWarning = overriddenAttrs: + builtins.concatStringsSep " " (builtins.map (colorize "1;97") (builtins.attrNames overriddenAttrs)); in - attr1 // checkedAttr2; + if overridden != {} + then + warn "Attributes overridden while merging ${sourceSet}: ${mkWarning overridden}" + merged + else merged; } -- cgit 1.4.1