@@ -72,8 +72,31 @@ defmodule Mix.Dep.Converger do
72
72
"""
73
73
def converge ( acc , lock , opts , callback ) do
74
74
{ deps , acc , lock } = all ( acc , lock , opts , callback )
75
- if remote = Mix.RemoteConverger . get ( ) , do: remote . post_converge
76
- { topological_sort ( deps ) , acc , lock }
75
+ if remote = Mix.RemoteConverger . get ( ) , do: remote . post_converge ( )
76
+
77
+ deps =
78
+ for % { app: app , opts: opts } = dep <- topological_sort ( deps ) do
79
+ case Keyword . pop ( opts , :app_properties ) do
80
+ { nil , _opts } ->
81
+ dep
82
+
83
+ { app_properties , opts } ->
84
+ case :application . load ( { :application , app , app_properties } ) do
85
+ :ok ->
86
+ :ok
87
+
88
+ { :error , { :already_loaded , _ } } ->
89
+ :ok
90
+
91
+ { :error , error } ->
92
+ Mix . raise ( "Could not load application #{ inspect ( app ) } : #{ inspect ( error ) } " )
93
+ end
94
+
95
+ % { dep | opts: opts }
96
+ end
97
+ end
98
+
99
+ { deps , acc , lock }
77
100
end
78
101
79
102
defp all ( acc , lock , opts , callback ) do
@@ -205,21 +228,20 @@ defmodule Mix.Dep.Converger do
205
228
all ( t , [ dep | acc ] , upper , breadths , optional , rest , lock , state )
206
229
207
230
:nomatch ->
208
- { % { app: app , deps: deps , opts: opts } = dep , app_properties , rest , lock } =
231
+ { % { app: app , deps: deps , opts: opts } = dep , rest , lock } =
209
232
case state . cache . ( dep ) do
210
233
{ :loaded , cached_dep } ->
211
- { cached_dep , nil , rest , lock }
234
+ { cached_dep , rest , lock }
212
235
213
236
{ :unloaded , dep , children } ->
214
237
{ dep , rest , lock } = state . callback . ( put_lock ( dep , lock ) , rest , lock )
215
238
216
- Mix.Dep.Loader . with_system_env ( dep , fn ->
217
- # After we invoke the callback (which may actually check out the
218
- # dependency), we load the dependency including its latest info
219
- # and children information.
220
- { dep , app_properties } = Mix.Dep.Loader . load ( dep , children , state . locked? )
221
- { dep , app_properties , rest , lock }
222
- end )
239
+ dep =
240
+ Mix.Dep.Loader . with_system_env ( dep , fn ->
241
+ Mix.Dep.Loader . load ( dep , children , state . locked? )
242
+ end )
243
+
244
+ { dep , rest , lock }
223
245
end
224
246
225
247
# Something that we previously ruled out as an optional dependency is
@@ -234,24 +256,7 @@ defmodule Mix.Dep.Converger do
234
256
split_non_fulfilled_optional ( deps , Enum . map ( acc , & & 1 . app ) , opts [ :from_umbrella ] )
235
257
236
258
new_breadths = Enum . map ( deps , & & 1 . app ) ++ breadths
237
- res = all ( deps , acc , breadths , new_breadths , discarded ++ optional , rest , lock , state )
238
-
239
- # After we traverse all of our children, we can load ourselves.
240
- # This is important in case of included application.
241
- if app_properties do
242
- case :application . load ( { :application , app , app_properties } ) do
243
- :ok ->
244
- :ok
245
-
246
- { :error , { :already_loaded , _ } } ->
247
- :ok
248
-
249
- { :error , error } ->
250
- Mix . raise ( "Could not start application #{ inspect ( app ) } : #{ inspect ( error ) } " )
251
- end
252
- end
253
-
254
- res
259
+ all ( deps , acc , breadths , new_breadths , discarded ++ optional , rest , lock , state )
255
260
end
256
261
end
257
262
0 commit comments