@@ -100,10 +100,12 @@ defmodule Mix.Dep do
100
100
101
101
# Ensure all apps are atoms
102
102
apps = to_app_names ( given )
103
-
104
- # We need to keep the order of deps, loaded/1 properly orders them
105
- deps = Enum . filter ( all_deps , & ( & 1 . app in apps ) )
106
- deps = if opts [ :include_children ] , do: include_children ( deps , all_deps ) , else: deps
103
+ deps =
104
+ if opts [ :include_children ] do
105
+ get_deps_with_children ( all_deps , apps )
106
+ else
107
+ get_deps ( all_deps , apps )
108
+ end
107
109
108
110
Enum . each apps , fn ( app ) ->
109
111
unless Enum . any? ( all_deps , & ( & 1 . app == app ) ) do
@@ -114,17 +116,29 @@ defmodule Mix.Dep do
114
116
deps
115
117
end
116
118
117
- # If we need to include children, we need to traverse all
118
- # them, fetch the uniq app names, and once again filter all
119
- # deps to keep the proper dependency ordering.
120
- defp include_children ( deps , all_deps ) do
121
- deps = include_children ( deps )
122
- apps = deps |> Enum . map ( & & 1 . app ) |> Enum . uniq
119
+ defp get_deps ( all_deps , apps ) do
123
120
Enum . filter ( all_deps , & ( & 1 . app in apps ) )
124
121
end
125
122
126
- defp include_children ( [ ] ) , do: [ ]
127
- defp include_children ( deps ) , do: deps ++ include_children ( Enum . flat_map ( deps , & & 1 . deps ) )
123
+ defp get_deps_with_children ( all_deps , apps ) do
124
+ deps = get_children ( all_deps , apps )
125
+ apps = deps |> Enum . map ( & & 1 . app ) |> Enum . uniq
126
+ get_deps ( all_deps , apps )
127
+ end
128
+
129
+ defp get_children ( _all_deps , [ ] ) , do: [ ]
130
+ defp get_children ( all_deps , apps ) do
131
+ # Current deps
132
+ deps = get_deps ( all_deps , apps )
133
+
134
+ # Children apps
135
+ apps = for % { deps: children } <- deps ,
136
+ % { app: app } <- children ,
137
+ do: app
138
+
139
+ # Current deps + children deps
140
+ deps ++ get_children ( all_deps , apps )
141
+ end
128
142
129
143
@ doc """
130
144
Runs the given `fun` inside the given dependency project by
0 commit comments