buildGoPackage: keep string context (#63680)

In Nix, each string has a context that it carries of where it
originated. Some functions like filterAttrs modify the context of its
args when doing comparisons. That is important because we use the
string context of “name” to get where a derivation was defined. This
causes some builtins like unsafeGetAttrPos to report incorrectly that
the string was set in lib/attrsets.nix and reporting that as the
source file. Using removeAttrs avoids this problem.

Fixes #63679
This commit is contained in:
Matthew Bauer 2019-06-22 22:07:26 -04:00 committed by Wael Nasreddine
parent 2b5ba7f723
commit 1f46aaab1b

View file

@ -35,14 +35,12 @@
# IE: programs coupled with the compiler
, allowGoReference ? false
, meta ? {}, ... } @ args':
, meta ? {}, ... } @ args:
with builtins;
let
args = lib.filterAttrs (name: _: name != "extraSrcs") args';
removeReferences = [ ] ++ lib.optional (!allowGoReference) go;
removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
@ -75,7 +73,7 @@ let
goPath = if goDeps != null then importGodeps { depsFile = goDeps; } ++ extraSrcs
else extraSrcs;
package = go.stdenv.mkDerivation (
(builtins.removeAttrs args [ "goPackageAliases" "disabled" ]) // {
(builtins.removeAttrs args [ "goPackageAliases" "disabled" "extraSrcs"]) // {
nativeBuildInputs = [ removeReferencesTo go ]
++ (lib.optional (!dontRenameImports) govers) ++ nativeBuildInputs;