@@ -42,8 +42,9 @@ defmodule Mix.Tasks.Compile.Elixir do
4242 Kernel.ParallelCompiler . files :lists . usort ( stale ) ,
4343 each_module: & each_module ( pid , compile_path , cwd , & 1 , & 2 , & 3 ) ,
4444 each_file: & each_file ( & 1 )
45+ :gen_server . cast ( pid , { :write , manifest } )
4546 after
46- :gen_server . call ( pid , { :stop , manifest } )
47+ :gen_server . call ( pid , :stop )
4748 end
4849
4950 :ok
@@ -57,13 +58,12 @@ defmodule Mix.Tasks.Compile.Elixir do
5758 defp each_module ( pid , compile_path , cwd , source , module , binary ) do
5859 bin = atom_to_binary ( module )
5960 beam = Path . join ( compile_path , bin <> ".beam" )
60- File . write! ( beam , binary )
6161
6262 deps = Kernel.LexicalTracker . remotes ( module )
6363 |> :lists . usort |> Enum . map ( & atom_to_binary ( & 1 ) )
6464
6565 relative = if cwd , do: Path . relative_to ( source , cwd ) , else: source
66- :gen_server . cast ( pid , { :store , beam , bin , relative , deps } )
66+ :gen_server . cast ( pid , { :store , beam , bin , relative , deps , binary } )
6767 end
6868
6969 defp each_file ( file ) do
@@ -126,7 +126,8 @@ defmodule Mix.Tasks.Compile.Elixir do
126126
127127 defp write_manifest ( manifest , entries ) do
128128 lines = Enum . map ( entries , fn
129- { beam , module , source , deps } ->
129+ { beam , module , source , deps , binary } ->
130+ if binary , do: File . write! ( beam , binary )
130131 [ beam , module , source | deps ] |> Enum . join ( "\t " )
131132 end )
132133 Mix.Utils . write_manifest ( manifest , lines )
@@ -135,20 +136,24 @@ defmodule Mix.Tasks.Compile.Elixir do
135136 # Callbacks
136137
137138 def init ( entries ) do
138- { :ok , entries }
139+ { :ok , Enum . map ( entries , & Tuple . insert_at ( & 1 , 4 , nil ) ) }
139140 end
140141
141- def handle_call ( { :stop , manifest } , _from , entries ) do
142- write_manifest ( manifest , entries )
142+ def handle_call ( :stop , _from , entries ) do
143143 { :stop , :normal , :ok , entries }
144144 end
145145
146146 def handle_call ( msg , from , state ) do
147147 super ( msg , from , state )
148148 end
149149
150- def handle_cast ( { :store , beam , module , source , deps } , entries ) do
151- { :noreply , :lists . keystore ( beam , 1 , entries , { beam , module , source , deps } ) }
150+ def handle_cast ( { :write , manifest } , entries ) do
151+ write_manifest ( manifest , entries )
152+ { :noreply , entries }
153+ end
154+
155+ def handle_cast ( { :store , beam , module , source , deps , binary } , entries ) do
156+ { :noreply , :lists . keystore ( beam , 1 , entries , { beam , module , source , deps , binary } ) }
152157 end
153158
154159 def handle_cast ( msg , state ) do
0 commit comments