lib.systems.extensions.sharedLibrary: do not throw#244118
Merged
1 commit merged intomasterfrom Jul 20, 2023
unknown repository
Merged
lib.systems.extensions.sharedLibrary: do not throw#2441181 commit merged intomasterfrom unknown repository
throw#2441181 commit merged intomasterfrom
unknown repository
Conversation
Because downstream code expects to use `==` on platform attrsets, we are unfortunately not able to throw a useful error message when the `sharedLibrary` attribute is accessed. When users do a comparison like: stdenv.hostPlatform == pkgsStatic.stdenv.hostPlatform ... in a situation where `stdenv.hostPlatform.hasSharedLibraries`, they expect this to return `false`. Unfortunately Nix does a deep equality comparison here, and ends up forcing the `pkgsStatic.stdenv.hostPlatform.extensions.sharedLibrary` attribute, which throws the error. Rather than returning `null`, this commit instead simply omits the `extensions.sharedLibrary` attribute. This provides the user with a more-useful error message: instead of waiting until the `null` is used (and hoping that produces an error), the user will get an error about the `extensions.sharedLibrary` attribute being missing, at the position where it was referenced. Big thanks to @trofi for his PR to add `NIX_VALIDATE_EVAL_NONDETERMINISM` to Nix, which I am now using. It made tracking this down really easy! Fixes #244045
This was referenced Jul 18, 2023
Contributor
|
Another option is not to provide the attribute at all with a fancy computed assignment: That way error messages attempting to use irrelevant attribute might be slightly clearer. But I did not test it. Might break more than it fixes. |
Author
|
Updated to implement @trofi's suggestion, but using No drv-hash change (or eval failure) with |
Contributor
|
Any chance this could be reviewed? thanks |
vkryachko
approved these changes
Jul 20, 2023
12 tasks
This pull request was closed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of changes
Because downstream code expects to use
==on platform attrsets, we are unfortunately not able to throw a useful error message when thesharedLibraryattribute is accessed.When users do a comparison like:
... in a situation where
stdenv.hostPlatform.hasSharedLibraries, they expect this to returnfalse. Unfortunately Nix does a deep equality comparison here, and ends up forcing thepkgsStatic.stdenv.hostPlatform.extensions.sharedLibraryattribute, which throws the error.Rather than returning
null, this commit instead simply omits theextensions.sharedLibraryattribute. This provides the user with a more-useful error message: instead of waiting until thenullis used (and hoping that produces an error), the user will get an error about theextensions.sharedLibraryattribute being missing, at the position where it was referenced.Big thanks to @trofi for his PR to add
NIX_VALIDATE_EVAL_NONDETERMINISMto Nix, which I am now using. It made tracking this down really easy!Fixes #244045
Things done
sandbox = trueset innix.conf? (See Nix manual)nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage./result/bin/)