From 78b4e100def8b2ba91ac6c9a1c7d6936e21a8e64 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Sun, 12 Mar 2023 20:53:36 +0900 Subject: [PATCH 1/2] Include cwd in compiler cache key Without this, moving or copying a directory would not recompile beam files despite the fact their :source absolute path is obsolete. This could create issues with ex_doc. --- lib/mix/lib/mix/tasks/compile.elixir.ex | 2 +- .../test/mix/tasks/compile.elixir_test.exs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/mix/lib/mix/tasks/compile.elixir.ex b/lib/mix/lib/mix/tasks/compile.elixir.ex index 8df8b3eef8c..87776af5639 100644 --- a/lib/mix/lib/mix/tasks/compile.elixir.ex +++ b/lib/mix/lib/mix/tasks/compile.elixir.ex @@ -105,7 +105,7 @@ defmodule Mix.Tasks.Compile.Elixir do manifest = manifest() base = xref_exclude_opts(project[:elixirc_options] || [], project) - cache_key = {base, srcs, "--no-optional-deps" in args} + cache_key = {base, srcs, File.cwd!(), "--no-optional-deps" in args} opts = base diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs index c2e32f7d36a..6a30f69ebf2 100644 --- a/lib/mix/test/mix/tasks/compile.elixir_test.exs +++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs @@ -82,6 +82,32 @@ defmodule Mix.Tasks.Compile.ElixirTest do end) end + test "recompiles project if working directory changed" do + in_fixture("no_mixfile", fn -> + Mix.Project.push(MixTest.Case.Sample) + + assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []} + assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]} + assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]} + + tmp = tmp_path("copied") + File.cp_r!(File.cwd!(), tmp) + File.cd!(tmp) + + File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time) + + Code.put_compiler_option(:ignore_module_conflict, true) + + assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []} + assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]} + assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]} + assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time + end) + after + Code.put_compiler_option(:ignore_module_conflict, false) + File.rm_rf!(tmp_path("copied")) + end + test "recompiles files using Mix.Project if mix.exs changes" do in_fixture("no_mixfile", fn -> Mix.Project.push(MixTest.Case.Sample, __ENV__.file) From b379db7f84bd378af5b477c5d51363cbc35d2128 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Sun, 12 Mar 2023 22:50:45 +0900 Subject: [PATCH 2/2] Remove un-necessary test --- .../test/mix/tasks/compile.elixir_test.exs | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs index 6a30f69ebf2..c2e32f7d36a 100644 --- a/lib/mix/test/mix/tasks/compile.elixir_test.exs +++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs @@ -82,32 +82,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do end) end - test "recompiles project if working directory changed" do - in_fixture("no_mixfile", fn -> - Mix.Project.push(MixTest.Case.Sample) - - assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []} - assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]} - assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]} - - tmp = tmp_path("copied") - File.cp_r!(File.cwd!(), tmp) - File.cd!(tmp) - - File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time) - - Code.put_compiler_option(:ignore_module_conflict, true) - - assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []} - assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]} - assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]} - assert File.stat!("_build/dev/lib/sample/.mix/compile.elixir").mtime > @old_time - end) - after - Code.put_compiler_option(:ignore_module_conflict, false) - File.rm_rf!(tmp_path("copied")) - end - test "recompiles files using Mix.Project if mix.exs changes" do in_fixture("no_mixfile", fn -> Mix.Project.push(MixTest.Case.Sample, __ENV__.file)