lol

stdenv.mkDerivation: warn when overriding version without also overriding src (#406535)

authored by winter.bsky.social and committed by

GitHub 0ca4e5f0 e48f0a06

+48 -1
+2
pkgs/applications/editors/neovim/build-neovim-plugin.nix
··· 26 26 27 27 luaDrv = originalLuaDrv.overrideAttrs (oa: { 28 28 version = attrs.version or oa.version; 29 + __intentionallyOverridingVersion = true; 29 30 rockspecVersion = oa.rockspecVersion; 30 31 31 32 extraConfig = '' ··· 43 44 lua.pkgs.luarocksMoveDataFolder 44 45 ]; 45 46 version = "${originalLuaDrv.version}-unstable-${oa.version}"; 47 + __intentionallyOverridingVersion = true; 46 48 } 47 49 ) 48 50 );
+1
pkgs/applications/video/obs-studio/default.nix
··· 67 67 68 68 cef = cef-binary.overrideAttrs (oldAttrs: { 69 69 version = "127.3.5"; 70 + __intentionallyOverridingVersion = true; # `cef-binary` uses the overridden `srcHash` values in its source FOD 70 71 gitRevision = "114ea2a"; 71 72 chromiumVersion = "127.0.6533.120"; 72 73
+1
pkgs/by-name/bo/bolt-launcher/package.nix
··· 23 23 let 24 24 cef = cef-binary.overrideAttrs (oldAttrs: { 25 25 version = "126.2.18"; 26 + __intentionallyOverridingVersion = true; # `cef-binary` uses the overridden `srcHash` values in its source FOD 26 27 gitRevision = "3647d39"; 27 28 chromiumVersion = "126.0.6478.183"; 28 29
+1
pkgs/by-name/li/linux-wallpaperengine/package.nix
··· 33 33 let 34 34 cef = cef-binary.overrideAttrs (oldAttrs: { 35 35 version = "120.1.10"; 36 + __intentionallyOverridingVersion = true; # `cef-binary` uses the overridden `srcHash` values in its source FOD 36 37 gitRevision = "3ce3184"; 37 38 chromiumVersion = "120.0.6099.129"; 38 39
+1
pkgs/development/lua-modules/overrides.nix
··· 109 109 rev = lib.last (lib.splitString "-" (lib.last rel)); 110 110 in 111 111 "${date}-${rev}"; 112 + __intentionallyOverridingVersion = true; 112 113 113 114 meta.broken = luaOlder "5.1" || luaAtLeast "5.5"; 114 115
+42 -1
pkgs/stdenv/generic/make-derivation.nix
··· 87 87 args = rattrs (args // { inherit finalPackage overrideAttrs; }); 88 88 # ^^^^ 89 89 90 - overrideAttrs = f0: makeDerivationExtensible (lib.extends (lib.toExtension f0) rattrs); 90 + overrideAttrs = 91 + f0: 92 + let 93 + extends' = 94 + overlay: f: 95 + ( 96 + final: 97 + let 98 + prev = f final; 99 + thisOverlay = overlay final prev; 100 + warnForBadVersionOverride = ( 101 + thisOverlay ? version 102 + && !(thisOverlay ? src) 103 + && !(thisOverlay.__intentionallyOverridingVersion or false) 104 + ); 105 + pname = args.pname or "<unknown name>"; 106 + version = args.version or "<unknown version>"; 107 + pos = builtins.unsafeGetAttrPos "version" thisOverlay; 108 + in 109 + lib.warnIf warnForBadVersionOverride '' 110 + ${ 111 + args.name or "${pname}-${version}" 112 + } was overridden with `version` but not `src` at ${pos.file or "<unknown file>"}:${ 113 + builtins.toString pos.line or "<unknown line>" 114 + }:${builtins.toString pos.column or "<unknown column>"}. 115 + 116 + This is most likely not what you want. In order to properly change the version of a package, override 117 + both the `version` and `src` attributes: 118 + 119 + hello.overrideAttrs (oldAttrs: rec { 120 + version = "1.0.0"; 121 + src = pkgs.fetchurl { 122 + url = "mirror://gnu/hello/hello-''${version}.tar.gz"; 123 + hash = "..."; 124 + }; 125 + }) 126 + 127 + (To silence this warning, set `__intentionallyOverridingVersion = true` in your `overrideAttrs` call.) 128 + '' (prev // (builtins.removeAttrs thisOverlay [ "__intentionallyOverridingVersion" ])) 129 + ); 130 + in 131 + makeDerivationExtensible (extends' (lib.toExtension f0) rattrs); 91 132 92 133 finalPackage = mkDerivationSimple overrideAttrs args; 93 134