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

lib: Deprecate overrideScope in lieu of overrideScope' taking arguments in the conventional order #47238

Merged
merged 1 commit into from Sep 24, 2018

Conversation

Ericson2314
Copy link
Member

@Ericson2314 Ericson2314 commented Sep 23, 2018

Motivation for this change

Consistency with everything else. See the doc changes for details.

Since that implementation did not even share any code either until I changed it recently in 3cf4354, this inconsistency is almost certainly an oversight and not intentional.

There's no way to make this a smooth transition, sadly, but I hope in listing common uses in the manual, people searching for fixes to their problems will easy find it.

Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Determined the impact on package closure size (by running nix path-info -S before and after)
  • Fits CONTRIBUTING.md.

<varname>deepin</varname>. If you use any of these package sets and
experience problems, please check your local configuration for any
overrides / overlays and make sure they are now in the conventional
<literal>self: super: { … }</literal> form.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line breaks look good!

This buries the most important user-facing change under quite a lot of technical bits that aren't relevant to the user trying to fix their system. Ideally we'd swap it: call out exactly who is impacted in the first few words, then how to fix it, then the technical why details.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do you like the order now?

@samueldr

This comment has been minimized.

@srhb
Copy link
Contributor

srhb commented Sep 23, 2018

As said elsewhere, I think this is a good change and I approve, without making a judgment call on whether it's 18.09 material. :)

@Ericson2314 Ericson2314 force-pushed the overrideScope-order branch 2 times, most recently from ea1a01e to d72801a Compare September 23, 2018 18:51
@edolstra
Copy link
Member

I don't think breaking people's Nix expressions just for "consistency" is a good idea, especially since the resulting error messages will likely be baffling. It also makes it impossible to share a Nix expression using overrideScope between (say) 18.03 and 18.09 machines.

@infinisil
Copy link
Member

I agree with @edolstra on this

If we want consistency regardless, we can leave the old function as it is and mark it deprecated, while introducing a differently named new one with the changed argument order.

@Ericson2314
Copy link
Member Author

Sure will do. Then we can send to 18.09 too without qualms.

@Ericson2314 Ericson2314 changed the title lib: Make overrideScope take arguments in the conventional order lib: Deprecate overrideScope in lieu of overrideScope' taking arguments in the conventional order Sep 24, 2018
…order

The `overrideScope` bound by `makeScope` (via special `callPackage`)
took an override in the form `super: self { … }`. But this is
dangerously close to the `self: super { … }` form used by *everything*
else, even other definitions of `overrideScope`! Since that
implementation did not even share any code either until I changed it
recently in 3cf4354, this inconsistency
is almost certainly an oversight and not intentional.

Unfortunately, just as the inconstency is hard to debug if one just
assumes the conventional order, any sudden fix would break existing
overrides in the same hard-to-debug way. So instead of changing the
definition a new `overrideScope'` with the conventional order is added,
and old `overrideScope` deprecated with a warning saying to use
`overrideScope'` instead. That will hopefully get people to stop using
`overrideScope`, freeing our hand to change or remove it in the future.
@Ericson2314 Ericson2314 merged commit 22ce614 into NixOS:master Sep 24, 2018
@Ericson2314 Ericson2314 deleted the overrideScope-order branch September 24, 2018 22:04
@acowley
Copy link
Contributor

acowley commented Sep 28, 2018

I don't understand the warning message used here:

"`overrideScope` (from `lib.makeScope`) is deprecated. Do `overrideScope' (self: self: { … })` instead of `overrideScope (super: self: { … })`. All other overrides have the parameters in that order, including other definitions of `overrideScope`. This was the only definition violating the pattern."

Is it supposed say, "Do overrideScope' (self: super: { ... })"?

@infinisil
Copy link
Member

Yeah definitely, this was merged too soon imo, without proper review

@grahamc
Copy link
Member

grahamc commented Sep 28, 2018

15:23 <infinisil> Well I guess the change is fine
15:23 <infinisil> I'm complaining about the error introduced now
15:23 <gchristensen> ah! we can make that better, let's work on a solution

@Ericson2314
Copy link
Member Author

I wrote it markdown. I suppose `overrideScope' looks like some sort ASCII workaround.

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

8 participants