@@ -48,6 +48,12 @@ defmodule Mix.Tasks.Deps.Loadpaths do
4848      Mix.Task . run ( "archive.check" ,  args ) 
4949    end 
5050
51+     config  =  Mix.Project . config ( ) 
52+ 
53+     if  "--no-elixir-version-check"  not in  args  do 
54+       check_elixir_version ( config ) 
55+     end 
56+ 
5157    all  =  Mix.Dep . load_and_cache ( ) 
5258
5359    all  = 
@@ -57,14 +63,8 @@ defmodule Mix.Tasks.Deps.Loadpaths do
5763        all 
5864      end 
5965
60-     config  =  Mix.Project . config ( ) 
61- 
62-     if  "--no-elixir-version-check"  not in  args  do 
63-       check_elixir_version ( config ) 
64-     end 
65- 
6666    if  "--no-deps-check"  not in  args  do 
67-       deps_check ( all ,  "--no-compile"  in  args ) 
67+       deps_check ( config ,   all ,  "--no-compile"  in  args ) 
6868    end 
6969
7070    Code . prepend_paths ( Enum . flat_map ( all ,  & Mix.Dep . load_paths / 1 ) ,  cache:  true ) 
@@ -93,25 +93,38 @@ defmodule Mix.Tasks.Deps.Loadpaths do
9393    end 
9494  end 
9595
96+   defp  deps_check ( config ,  all ,  no_compile? )  do 
97+     with  { :compile ,  _to_compile }  <-  deps_check ( all ,  no_compile? )  do 
98+       # We need to compile, we first grab the lock, then, we check 
99+       # again and compile if still applicable 
100+       Mix.Project . with_build_lock ( config ,  fn  -> 
101+         all  =  reload_deps ( all ) 
102+ 
103+         with  { :compile ,  to_compile }  <-  deps_check ( all ,  no_compile? )  do 
104+           Mix.Tasks.Deps.Compile . compile ( to_compile ) 
105+ 
106+           to_compile 
107+           |>  reload_deps ( ) 
108+           |>  Enum . filter ( & ( not  Mix.Dep . ok? ( & 1 ) ) ) 
109+           |>  show_not_ok! ( ) 
110+         end 
111+       end ) 
112+     end 
113+   end 
114+ 
96115  defp  deps_check ( all ,  no_compile? )  do 
97116    all  =  Enum . map ( all ,  & check_lock / 1 ) 
98-     { not_ok ,  compile }  =  partition ( all ,  [ ] ,  [ ] ) 
117+     { not_ok ,  to_compile }  =  partition ( all ,  [ ] ,  [ ] ) 
99118
100119    cond  do 
101120      not_ok  !=  [ ]  -> 
102121        show_not_ok! ( not_ok ) 
103122
104-       compile  ==  [ ]  or  no_compile?  -> 
123+       to_compile  ==  [ ]  or  no_compile?  -> 
105124        :ok 
106125
107126      true  -> 
108-         Mix.Tasks.Deps.Compile . compile ( compile ) 
109- 
110-         compile 
111-         |>  Enum . map ( &  & 1 . app ) 
112-         |>  Mix.Dep . filter_by_name ( Mix.Dep . load_and_cache ( ) ) 
113-         |>  Enum . filter ( & ( not  Mix.Dep . ok? ( & 1 ) ) ) 
114-         |>  show_not_ok! ( ) 
127+         { :compile ,  to_compile } 
115128    end 
116129  end 
117130
@@ -136,6 +149,12 @@ defmodule Mix.Tasks.Deps.Loadpaths do
136149    { Enum . reverse ( not_ok ) ,  Enum . reverse ( compile ) } 
137150  end 
138151
152+   defp  reload_deps ( deps )  do 
153+     deps 
154+     |>  Enum . map ( &  & 1 . app ) 
155+     |>  Mix.Dep . filter_by_name ( Mix.Dep . load_and_cache ( ) ) 
156+   end 
157+ 
139158  # Those are compiled by umbrella. 
140159  defp  from_umbrella? ( dep )  do 
141160    dep . opts [ :from_umbrella ] 
0 commit comments