@@ -397,7 +397,7 @@ defmodule Mix.Compilers.Elixir do
397397 Enum . any? ( modules , & Map . has_key? ( modules_to_recompile , & 1 ) ) or
398398 Enum . any? ( external , & stale_external? ( & 1 , modified , sources_stats ) ) or
399399 ( last_mtime > modified and
400- ( missing_beam_file? ( dest , modules ) or digest != digest_file! ( source ) ) ) ,
400+ ( missing_beam_file? ( dest , modules ) or digest_changed? ( source , digest ) ) ) ,
401401 do: source
402402
403403 changed = new_paths ++ changed
@@ -427,7 +427,7 @@ defmodule Mix.Compilers.Elixir do
427427 defp stale_external? ( { external , digest } , modified , sources_stats ) do
428428 case sources_stats do
429429 % { ^ external => { 0 , 0 } } -> digest != nil
430- % { ^ external => { mtime , _ } } -> mtime > modified and digest != digest_file! ( external )
430+ % { ^ external => { mtime , _ } } -> mtime > modified and digest_changed? ( external , digest )
431431 end
432432 end
433433
@@ -441,8 +441,11 @@ defmodule Mix.Compilers.Elixir do
441441 end )
442442 end
443443
444- defp digest_file! ( file ) do
445- file |> File . read! ( ) |> digest_contents ( )
444+ defp digest_changed? ( file , digest ) do
445+ case File . read ( file ) do
446+ { :ok , binary } -> digest != digest_contents ( binary )
447+ { :error , _ } -> true
448+ end
446449 end
447450
448451 defp digest_contents ( contents ) do
0 commit comments