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

(cherry picked from commit 1f46aaab1b)
The web list of packages shows the current stable branch, so we needed
to backport this to fix that effect soonish.  The change itself seems
very safe; only one rebuild is detected: `common-updater-scripts`
This commit is contained in:
Matthew Bauer
2019-06-22 22:07:26 -04:00
committed by Vladimír Čunát
parent f49d8beff0
commit d7752fc0eb

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;