@@ -23,7 +23,8 @@ defmodule Mix.Deps.Converger do
2323 main = Enum . reverse Mix.Deps.Project . all
2424 config = [ deps_path: Path . expand ( Mix . project [ :deps_path ] ) ,
2525 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 }
2728 end
2829
2930 # We traverse the tree of dependencies in a breadth-
@@ -115,19 +116,35 @@ defmodule Mix.Deps.Converger do
115116 File . regular? ( Path . join dep . opts [ :dest ] , "mix.exs" )
116117 end
117118
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+
118143 # The dependency contains a Mixfile, so let's
119144 # 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 }
131148 end
132149 end
133150end
0 commit comments