@@ -23,7 +23,8 @@ defmodule Mix.Deps.Converger do
23
23
main = Enum . reverse Mix.Deps.Project . all
24
24
config = [ deps_path: Path . expand ( Mix . project [ :deps_path ] ) ,
25
25
root_lockfile: Path . expand ( Mix . project [ :lockfile ] ) ]
26
- all ( main , [ ] , [ ] , main , config , callback , rest )
26
+ { deps , rest } = all ( main , [ ] , [ ] , main , config , callback , rest )
27
+ { nest_deps ( deps , config ) , rest }
27
28
end
28
29
29
30
# We traverse the tree of dependencies in a breadth-
@@ -115,19 +116,35 @@ defmodule Mix.Deps.Converger do
115
116
File . regular? ( Path . join dep . opts [ :dest ] , "mix.exs" )
116
117
end
117
118
119
+ # Sets the `deps` field to the child dependencies of all
120
+ # given dependencies and does so recursively.
121
+ defp nest_deps ( deps , config ) do
122
+ Enum . map deps , fn dep ->
123
+ nest_deps ( dep , deps , config )
124
+ end
125
+ end
126
+
127
+ defp nest_deps ( dep , deps , config ) do
128
+ if available? ( dep ) and mixfile? ( dep ) do
129
+ nested_apps = nested_names ( dep , config )
130
+ sub_deps = Enum . filter ( deps , fn dep -> dep . app in nested_apps end )
131
+ dep . deps Enum . map ( sub_deps , nest_deps ( & 1 , deps , config ) )
132
+ else
133
+ dep
134
+ end
135
+ end
136
+
137
+ defp nested_names ( dep , post_config ) do
138
+ Mix.Deps . in_dependency dep , post_config , fn _ ->
139
+ Mix.Deps.Project . all_names
140
+ end
141
+ end
142
+
118
143
# The dependency contains a Mixfile, so let's
119
144
# load it and retrieve its nested dependencies.
120
- defp nested_deps ( Mix.Dep [ app : app , opts: opts ] , post_config ) do
121
- env = opts [ :env ] || :prod
122
- old_env = Mix . env
123
-
124
- try do
125
- Mix . env ( env )
126
- Mix.Project . in_project ( app , opts [ :dest ] , post_config , fn project ->
127
- { project , Enum . reverse Mix.Deps.Project . all }
128
- end )
129
- after
130
- Mix . env ( old_env )
145
+ defp nested_deps ( dep , post_config ) do
146
+ Mix.Deps . in_dependency dep , post_config , fn project ->
147
+ { project , Enum . reverse Mix.Deps.Project . all }
131
148
end
132
149
end
133
150
end
0 commit comments