vrod
Dependencies have diverged: ex_doc
I have a problem that is coming up now and then. One app depends on another, which depends on another. This is all ok because the organization is good – no cyclic dependencies.
However, many times, I find that there is problem with ex_doc because all packages use this. But if one package includes it in a slightly different way, the app that depends on that package will get an error, something like:
Dependencies have diverged:
* ex_doc (Hex package)
the :only option for dependency ex_doc
> In mix.exs:
{:ex_doc, "~> 0.24.0", [env: :prod, repo: "hexpm", hex: "ex_doc", only: :dev, runtime: false, optional: true]}
does not match the :only option calculated for
> In deps/unicode_set/mix.exs:
{:ex_doc, "~> 0.19", [env: :prod, hex: "ex_doc", repo: "hexpm", optional: false]}
Remove the :only restriction from your dep
** (Mix) Can't continue due to errors on dependencies
I am trying many things to fix this in the dependencies, but it seems that always the parent app has this problem. It’s very frustrating!
I am noticing how packages like ecto use ex_doc, and is something like {:ex_doc, "~> 0.20", only: :docs} (but this does not seem to solve the “Dependencies have diverged” problem).
How should packages include ex_docs? Pretty much everything on hex.pm requires this package to make it’s documentation pages, yes?
Most Liked
kip
Thanks to @fireproofsocks and @vrod for the issue and PRs. I have merged and published:
Please reopen an issue if you spot anything else.
LostKobrakai
Dependencies always run in :prod env and :ex_doc is documented to be included as only: :dev (or custom equivalent). This should resolve the problem of ex_doc mismatches. Though it seems :unicode_set doesn’t exclude :ex_doc from :prod at the moment.
axelson
And a PR has already been made and merged to fix that: Sets ex_doc and benchee to optional: true; bumps vers by fireproofsocks · Pull Request #3 · elixir-unicode/unicode_set · GitHub
Now you can either depend on the unicode_set master branch {:unicode_set, github: "elixir-unicode/unicode_set", branch: "master"} or wait for the next release.
Another fix would be to use override: true on ex_doc. I’m actually surprised that the error message doesn’t recommend that, unless it doesn’t allow overriding “only”.
josevalim
Quick question: why does it depend on ExDoc for prod? Shouldn’t it be a dev only dep?
Edit: it is dev only now.
then there is no need to be optional!







