@@ -213,7 +213,8 @@ defmodule Mix.Dep.Converger do
213
213
in_upper? && other_opts [ :override ] ->
214
214
{ other |> with_matching_only ( dep , in_upper? ) , true }
215
215
converge? ( other , dep ) ->
216
- { other |> with_matching_only ( dep , in_upper? ) |> with_matching_req ( dep ) |> merge_manager ( dep ) , true }
216
+ { other |> with_matching_only ( dep , in_upper? )
217
+ |> with_matching_req ( dep ) |> merge_manager ( dep , in_upper? ) , true }
217
218
true ->
218
219
tag = if in_upper? , do: :overridden , else: :diverged
219
220
{ % { other | status: { tag , dep } } , true }
@@ -276,19 +277,10 @@ defmodule Mix.Dep.Converger do
276
277
end
277
278
end
278
279
279
- defp converge? ( % Mix.Dep { scm: scm1 , manager: manager1 , opts: opts1 } ,
280
- % Mix.Dep { scm: scm2 , manager: manager2 , opts: opts2 } ) do
281
- scm1 == scm2 and
282
- manager_equal? ( manager1 , manager2 ) and
283
- opts_equal? ( opts1 , opts2 ) and
284
- scm1 . equal? ( opts1 , opts2 )
280
+ defp converge? ( % Mix.Dep { scm: scm1 , opts: opts1 } , % Mix.Dep { scm: scm2 , opts: opts2 } ) do
281
+ scm1 == scm2 and opts_equal? ( opts1 , opts2 ) and scm1 . equal? ( opts1 , opts2 )
285
282
end
286
283
287
- defp manager_equal? ( manager , manager ) , do: true
288
- defp manager_equal? ( _ , nil ) , do: true
289
- defp manager_equal? ( nil , _ ) , do: true
290
- defp manager_equal? ( _ , _ ) , do: false
291
-
292
284
defp opts_equal? ( opts1 , opts2 ) do
293
285
keys = ~w( app env compile) a
294
286
Enum . all? ( keys , & ( Keyword . fetch ( opts1 , & 1 ) == Keyword . fetch ( opts2 , & 1 ) ) )
@@ -300,8 +292,18 @@ defmodule Mix.Dep.Converger do
300
292
end
301
293
end
302
294
303
- defp merge_manager ( other , dep ) do
304
- % { other | manager: other . manager || dep . manager }
295
+ defp merge_manager ( % { manager: other_manager } = other , % { manager: manager } , in_upper? ) do
296
+ % { other | manager: sort_manager ( other_manager , manager , in_upper? ) }
297
+ end
298
+
299
+ @ managers [ :mix , :rebar3 , :rebar , :make ]
300
+
301
+ defp sort_manager ( other_manager , manager , true ) do
302
+ other_manager || manager
303
+ end
304
+ defp sort_manager ( other_manager , manager , false ) do
305
+ priority = @ managers -- ( @ managers -- ( List . wrap ( other_manager ) ++ List . wrap ( manager ) ) )
306
+ List . first ( priority ) || other_manager || manager
305
307
end
306
308
307
309
defp with_matching_req ( % Mix.Dep { } = other , % Mix.Dep { } = dep ) do
0 commit comments