Skip to content

Commit e63b0b6

Browse files
committed
Do not assume external resources are available
1 parent 9e195f5 commit e63b0b6

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lib/mix/lib/mix/compilers/elixir.ex

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)