Skip to content

Commit f73e6f8

Browse files
author
José Valim
committed
Also store external resources that are not part of the cwd
Solves phoenixframework/phoenix_live_reload#37
1 parent 3610d59 commit f73e6f8

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,7 @@ defmodule Mix.Compilers.Elixir do
246246

247247
defp get_external_resources(module, cwd) do
248248
for file <- Module.get_attribute(module, :external_resource),
249-
File.regular?(file),
250-
relative = Path.relative_to(file, cwd),
251-
Path.type(relative) == :relative,
252-
do: relative
249+
do: Path.relative_to(file, cwd)
253250
end
254251

255252
defp each_file(source) do

lib/mix/lib/mix/compilers/test.ex

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,6 @@ defmodule Mix.Compilers.Test do
264264

265265
defp get_external_resources(module, cwd) do
266266
for file <- Module.get_attribute(module, :external_resource),
267-
File.regular?(file),
268-
relative = Path.relative_to(file, cwd),
269-
Path.type(relative) == :relative,
270-
do: relative
267+
do: Path.relative_to(file, cwd)
271268
end
272269
end

lib/mix/test/mix/tasks/compile.elixir_test.exs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,25 +172,43 @@ defmodule Mix.Tasks.Compile.ElixirTest do
172172

173173
test "compiles dependent changed files" do
174174
in_fixture "no_mixfile", fn ->
175+
tmp = tmp_path("c.eex")
175176
File.touch!("lib/a.eex")
177+
176178
File.write!("lib/a.ex", """
177179
defmodule A do
178-
@external_resource "lib/b.eex"
179180
@external_resource "lib/a.eex"
181+
@external_resource #{inspect tmp}
180182
def a, do: :ok
181183
end
182184
""")
183185

186+
# Compiles with missing external resources
184187
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == :ok
188+
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == :noop
185189
Mix.shell.flush
186190
purge [A, B]
187191

192+
# Update local existing resource
188193
File.touch!("lib/a.eex", {{2020, 1, 1}, {0, 0, 0}})
189194
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == :ok
195+
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
196+
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
190197

198+
# Does not update on old existing resource
199+
File.touch!("lib/a.eex", {{1970, 1, 1}, {0, 0, 0}})
200+
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == :noop
201+
Mix.shell.flush
202+
purge [A, B]
203+
204+
# Update external existing resource
205+
File.touch!(tmp, {{2020, 1, 1}, {0, 0, 0}})
206+
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == :ok
191207
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
192208
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
193209
end
210+
after
211+
File.rm tmp_path("c.eex")
194212
end
195213

196214
test "does not recompile empty files" do

0 commit comments

Comments
 (0)