Skip to content

Commit 47ae5b4

Browse files
author
José Valim
committed
Move Elixir version mismatch to a warning, closes #1951
1 parent 25c54da commit 47ae5b4

File tree

5 files changed

+10
-17
lines changed

5 files changed

+10
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Bug fixes
66
* [Atom] Inspect `:...` and `:foo@bar` without quoting
77
* [Kernel] Guarantee nullary funs/macros are allowed in guards
8+
* [Mix] Do not fail if a Mix dependency relies on an outdated Elixir version
89

910
* Deprecations
1011
* [Kernel] `binary_to_term/1`, `binary_to_term/2`, `term_to_binary/1` and `term_to_binary/2` are deprecated in favor of their counterparts in the `:erlang` module

lib/mix/lib/mix/deps.ex

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,6 @@ defmodule Mix.Deps do
259259
def format_status(Mix.Dep[status: { :elixirlock, _ }]),
260260
do: "the dependency is built with an out-of-date elixir version, run `mix deps.get`"
261261

262-
def format_status(Mix.Dep[status: { :elixirreq, req }]),
263-
do: "the dependency requires Elixir #{req} but you are running on v#{System.version}"
264-
265262
defp dep_status(Mix.Dep[app: app, requirement: req, opts: opts, from: from]) do
266263
info = { app, req, Dict.drop(opts, [:dest, :lock, :env, :build]) }
267264
"\n > In #{Path.relative_to_cwd(from)}:\n #{inspect info}\n"
@@ -307,7 +304,6 @@ defmodule Mix.Deps do
307304
def available?(Mix.Dep[status: { :overridden, _ }]), do: false
308305
def available?(Mix.Dep[status: { :diverged, _ }]), do: false
309306
def available?(Mix.Dep[status: { :divergedreq, _ }]), do: false
310-
def available?(Mix.Dep[status: { :elixirreq, _ }]), do: false
311307
def available?(Mix.Dep[status: { :unavailable, _ }]), do: false
312308
def available?(Mix.Dep[]), do: true
313309
@@ -321,12 +317,6 @@ defmodule Mix.Deps do
321317
available?(dep) and (manager != :mix or !extra[:umbrella?])
322318
end
323319
324-
@doc """
325-
Checks if a dependency can be updated.
326-
"""
327-
def updatable?(Mix.Dep[status: { :elixirreq, _ }]), do: true
328-
def updatable?(dep), do: available?(dep)
329-
330320
@doc """
331321
Checks if a dependency is out of date, also considering its
332322
lock status. Therefore, be sure to call `check_lock` before

lib/mix/lib/mix/deps/retriever.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ defmodule Mix.Deps.Retriever do
149149
end
150150

151151
if req = old_elixir_req(config) do
152-
dep = dep.status({ :elixirreq, req })
152+
Mix.shell.error "warning: the dependency #{dep.app} requires Elixir #{inspect req} but you " <>
153+
"are running on v#{System.version}, please run mix deps.update #{dep.app} to update it"
153154
end
154155

155156
{ dep.manager(:mix).opts(opts).extra(umbrella: umbrella?), children }

lib/mix/lib/mix/tasks/deps.update.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule Mix.Tasks.Deps.Update do
2020
2121
"""
2222

23-
import Mix.Deps, only: [unloaded: 2, unloaded_by_name: 3, updatable?: 1, format_dep: 1]
23+
import Mix.Deps, only: [unloaded: 2, unloaded_by_name: 3, available?: 1, format_dep: 1]
2424

2525
def run(args) do
2626
Mix.Project.get! # Require the project to be available
@@ -48,7 +48,7 @@ defmodule Mix.Tasks.Deps.Update do
4848
end
4949

5050
defp deps_updater(dep, { acc, lock }) do
51-
if updatable?(dep) do
51+
if available?(dep) do
5252
Mix.Dep[app: app, scm: scm, opts: opts] = dep
5353
Mix.shell.info "* Updating #{format_dep(dep)}"
5454

lib/mix/test/mix/tasks/deps_test.exs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ defmodule Mix.Tasks.DepsTest do
8383
end
8484
end
8585

86-
test "prints list of dependencies including elixir req mismatches" do
86+
test "prints elixir req mismatches" do
8787
Mix.Project.push ReqDepsApp
8888

8989
in_fixture "deps_status", fn ->
@@ -98,9 +98,10 @@ defmodule Mix.Tasks.DepsTest do
9898
"""
9999

100100
Mix.Tasks.Deps.run []
101-
assert_received { :mix_shell, :info, ["* ok (deps/ok)"] }
102-
message = " the dependency requires Elixir ~> 0.1.0 but you are running on v#{System.version}"
103-
assert_received { :mix_shell, :info, [^message] }
101+
102+
msg = "warning: the dependency ok requires Elixir \"~> 0.1.0\" but you are " <>
103+
"running on v0.12.3-dev, please run mix deps.update ok to update it"
104+
assert_received { :mix_shell, :error, [^msg] }
104105
end
105106
end
106107

0 commit comments

Comments
 (0)