@@ -72,8 +72,31 @@ defmodule Mix.Dep.Converger do
7272 """
7373 def converge ( acc , lock , opts , callback ) do
7474 { 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 }
77100 end
78101
79102 defp all ( acc , lock , opts , callback ) do
@@ -205,21 +228,20 @@ defmodule Mix.Dep.Converger do
205228 all ( t , [ dep | acc ] , upper , breadths , optional , rest , lock , state )
206229
207230 :nomatch ->
208- { % { app: app , deps: deps , opts: opts } = dep , app_properties , rest , lock } =
231+ { % { app: app , deps: deps , opts: opts } = dep , rest , lock } =
209232 case state . cache . ( dep ) do
210233 { :loaded , cached_dep } ->
211- { cached_dep , nil , rest , lock }
234+ { cached_dep , rest , lock }
212235
213236 { :unloaded , dep , children } ->
214237 { dep , rest , lock } = state . callback . ( put_lock ( dep , lock ) , rest , lock )
215238
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 }
223245 end
224246
225247 # Something that we previously ruled out as an optional dependency is
@@ -234,24 +256,7 @@ defmodule Mix.Dep.Converger do
234256 split_non_fulfilled_optional ( deps , Enum . map ( acc , & & 1 . app ) , opts [ :from_umbrella ] )
235257
236258 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 )
255260 end
256261 end
257262
0 commit comments