Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos/nix-daemon: Fix merging order for substituters option #159662

Merged
merged 1 commit into from
Feb 21, 2022
Merged

nixos/nix-daemon: Fix merging order for substituters option #159662

merged 1 commit into from
Feb 21, 2022

Conversation

polykernel
Copy link
Contributor

@polykernel polykernel commented Feb 12, 2022

The substituters option in nix.settings uses the order
of the substituters listed to define priority. Prior to #139075,
the corresponding option binaryCaches is declared in the nix namespace,
which is guaranteed to be merged last. However, the order of merging isn't
guaranteed in submodules. This cause definitions to be appended to the default
value instead of prepended, breaking backwards compatibility as reported in #158356.

The way this is addressed in the module system is with order priorities via
mkOrder and sorting definitions before merging. This PR restores the previous
behavior by setting a higher priority to the substituters option defined internally,
thus all definitions with default priority will be merged before it. This was chosen because
the mkRenamedOption function does not preserve order priority so users using legacy options do not have
precise control on placement.

This change should suffice for simple configuration, but further revision to the module system
is needed for to make various mk* functions aware of order priorities.

Motivation for this change
Things done
  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 22.05 Release Notes (or backporting 21.11 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
    • (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes
  • Fits CONTRIBUTING.md.

The `substituters` option in `nix.settings` uses the order
of the substituters listed to define priority. Prior to #139075,
the corresponding option `binaryCaches` is declared in the `nix` namespace,
which is guaranteed to be merged last. However, the order of merging isn't
guaranteed in submodules. This cause definitions to be appended to the default
value instead of prepended, breaking backwards compatibility as reported in #158356.

The way this is addressed in the module system is with order priorities via
`mkOrder` and sorting definitions before merging. This PR restores the previous
behavior by setting a higher priority to the substituters option defined internally,
thus all definitions with default priority will be merged before it. This was chosen because
the `mkRenamedOption` function does not preserve order priority so users using legacy options do not have
precise control on placement.

This change should suffice for simple configuration, but further revision to the module system
is needed for to make various `mk*` functions  aware of order priorities.
@domenkozar domenkozar merged commit 05afa7d into NixOS:master Feb 21, 2022
@polykernel polykernel deleted the nix-fix-substituters-merging-order branch February 23, 2022 21:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants