Skip to content

Commit 3ede5ff

Browse files
author
José Valim
committed
Store only app names in Mix.Dep.deps
1 parent 2f2f2e0 commit 3ede5ff

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

lib/mix/lib/mix/deps.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ defrecord Mix.Dep, [ scm: nil, app: nil, requirement: nil, status: nil, opts: ni
99
* `requirement` - a binary or regex with the dependency's requirement
1010
* `status` - the current status of the dependency, check `Mix.Deps.format_status/1` for more info;
1111
* `opts` - the options given by the developer
12-
* `deps` - dependencies of this dependency
12+
* `deps` - the app names of the dependencies of this dependency
1313
* `manager` - the project management, possible values: `:rebar` | `:mix` | `:make` | `nil`
1414
* `from` - path to the file where the dependency was defined
1515
* `extra` - a slot for adding extra configuration based on the scm.
@@ -437,7 +437,7 @@ defmodule Mix.Deps do
437437
dep_names = Enum.map(deps, fn dep -> dep.app end)
438438

439439
parents = Enum.filter all_deps, fn dep ->
440-
Enum.any?(dep.deps, fn child_dep -> child_dep.app in dep_names end)
440+
Enum.any?(dep.deps, &(&1 in dep_names))
441441
end
442442

443443
do_with_depending(parents, all_deps) ++ parents

lib/mix/lib/mix/deps/converger.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ defmodule Mix.Deps.Converger do
2222
:digraph.add_vertex(graph, app)
2323
end
2424

25-
Enum.each deps, fn Mix.Dep[app: app, deps: deps] ->
26-
Enum.each deps, fn Mix.Dep[app: other_app] ->
25+
Enum.each deps, fn Mix.Dep[app: app, deps: other_apps] ->
26+
Enum.each other_apps, fn other_app ->
2727
:digraph.add_edge(graph, other_app, app)
2828
end
2929
end
@@ -104,9 +104,9 @@ defmodule Mix.Deps.Converger do
104104
# After we invoke the callback (which may actually check out the
105105
# dependency), we fetch the dependency including its latest info
106106
# and children information.
107-
dep = Mix.Deps.Retriever.fetch(dep, config)
107+
{ dep, children } = Mix.Deps.Retriever.fetch(dep, config)
108108
{ acc, rest } = all(t, [dep|acc], upper_breadths, current_breadths, config, callback, rest)
109-
all(dep.deps, acc, current_breadths, dep.deps ++ current_breadths, config, callback, rest)
109+
all(children, acc, current_breadths, children ++ current_breadths, config, callback, rest)
110110
end
111111
end
112112

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

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,29 @@ defmodule Mix.Deps.Retriever do
2525
dep = dep.status(scm_status(scm, opts))
2626
dest = opts[:dest]
2727

28-
validate_app(cond do
29-
not ok?(dep.status) ->
30-
dep
28+
{ dep, children } =
29+
cond do
30+
not ok?(dep.status) ->
31+
{ dep, [] }
3132

32-
manager == :rebar ->
33-
rebar_dep(dep, config)
33+
manager == :rebar ->
34+
rebar_dep(dep, config)
3435

35-
mix?(dest) ->
36-
mix_dep(dep.manager(:mix), config)
36+
mix?(dest) ->
37+
mix_dep(dep.manager(:mix), config)
3738

38-
rebar?(dest) ->
39-
rebar_dep(dep.manager(:rebar), config)
39+
rebar?(dest) ->
40+
rebar_dep(dep.manager(:rebar), config)
4041

41-
make?(dest) ->
42-
dep.manager(:make)
42+
make?(dest) ->
43+
{ dep.manager(:make), [] }
4344

44-
true ->
45-
mix_dep(dep.manager(:mix), config)
46-
end)
45+
true ->
46+
mix_dep(dep.manager(:mix), config)
47+
end
48+
49+
dep = dep.deps(Enum.map(children, &(&1.app)))
50+
{ validate_app(dep), children }
4751
end
4852

4953
@doc """
@@ -150,15 +154,15 @@ defmodule Mix.Deps.Retriever do
150154
true -> status
151155
end
152156

153-
dep.manager(:mix).opts(opts).deps(children).status(stat)
157+
{ dep.manager(:mix).opts(opts).status(stat), children }
154158
end)
155159
end
156160

157161
defp rebar_dep(Mix.Dep[opts: opts] = dep, _config) do
158162
File.cd!(opts[:dest], fn ->
159163
config = Mix.Rebar.load_config(".")
160164
extra = Dict.take(config, [:sub_dirs])
161-
dep.manager(:rebar).extra(extra).deps(rebar_children(config))
165+
{ dep.manager(:rebar).extra(extra), rebar_children(config) }
162166
end)
163167
end
164168

lib/mix/lib/mix/deps/umbrella.ex

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ defmodule Mix.Deps.Umbrella do
2828
apps = Enum.map(deps, &(&1.app))
2929

3030
Enum.map(deps, fn(umbrella_dep) ->
31-
umbrella_dep = Mix.Deps.Retriever.fetch(umbrella_dep, [])
32-
umbrella_dep.update_deps(&Enum.filter(&1, fn dep ->
33-
Mix.Deps.available?(dep) and dep.app in apps
34-
end))
31+
{ umbrella_dep, deps } = Mix.Deps.Retriever.fetch(umbrella_dep, [])
32+
deps = lc Mix.Dep[] = dep inlist deps,
33+
Mix.Deps.available?(dep),
34+
dep.app in apps,
35+
do: dep.app
36+
umbrella_dep.deps(deps)
3537
end) |> Mix.Deps.Converger.topsort
3638
end
3739

38-
3940
defp extract_umbrella(paths) do
4041
lc path inlist paths do
4142
app = path |> Path.basename |> String.downcase |> binary_to_atom

0 commit comments

Comments
 (0)