Skip to content

Commit 2e34828

Browse files
author
José Valim
committed
Remove old mix artifacts without a need for force or changes
1 parent fb5c67b commit 2e34828

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

lib/mix/lib/mix/tasks/compile.elixir.ex

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ defmodule Mix.Tasks.Compile.Elixir do
55
use GenServer.Behaviour
66
@moduledoc false
77

8-
def files_to_path(manifest, stale, all, compile_path) do
9-
entries = read_manifest(manifest)
8+
def files_to_path(manifest, stale, all, compile_path, on_start) do
9+
all_entries = read_manifest(manifest)
1010

1111
# Each entry that is not in all must be removed
12-
entries = lc { beam, _m, source, _d } = entry inlist entries,
12+
entries = lc { beam, _m, source, _d } = entry inlist all_entries,
1313
is_in_list_or_remove(source, all, beam),
1414
do: entry
1515

@@ -21,15 +21,23 @@ defmodule Mix.Tasks.Compile.Elixir do
2121
not Enum.any?(entries, fn { _b, _m, s, _d } -> s == i end),
2222
do: i
2323

24-
if stale != [] do
25-
{ :ok, pid } = :gen_server.start_link(__MODULE__, entries, [])
26-
27-
try do
28-
files_to_path(pid, entries, stale, compile_path, File.cwd)
29-
:gen_server.cast(pid, :merge)
30-
after
31-
:gen_server.call(pid, { :stop, manifest })
32-
end
24+
cond do
25+
stale != [] ->
26+
on_start.()
27+
{ :ok, pid } = :gen_server.start_link(__MODULE__, entries, [])
28+
29+
try do
30+
do_files_to_path(pid, entries, stale, compile_path, File.cwd)
31+
:gen_server.cast(pid, :merge)
32+
after
33+
:gen_server.call(pid, { :stop, manifest })
34+
end
35+
36+
:ok
37+
all_entries != entries ->
38+
:ok
39+
true ->
40+
:noop
3341
end
3442
end
3543

@@ -42,14 +50,14 @@ defmodule Mix.Tasks.Compile.Elixir do
4250
end
4351
end
4452

45-
defp files_to_path(_pid, _entries, [], _compile_path, _cwd), do: :ok
46-
defp files_to_path(pid, entries, files, compile_path, cwd) do
53+
defp do_files_to_path(_pid, _entries, [], _compile_path, _cwd), do: :ok
54+
defp do_files_to_path(pid, entries, files, compile_path, cwd) do
4755
Kernel.ParallelCompiler.files :lists.usort(files),
4856
each_module: each_module(pid, compile_path, cwd, &1, &2, &3),
4957
each_file: each_file(&1),
5058
each_waiting: each_waiting(entries, &1)
5159

52-
files_to_path(pid, entries, :gen_server.call(pid, :next), compile_path, cwd)
60+
do_files_to_path(pid, entries, :gen_server.call(pid, :next), compile_path, cwd)
5361
end
5462

5563
defp each_module(pid, compile_path, cwd, source, module, binary) do
@@ -240,16 +248,11 @@ defmodule Mix.Tasks.Compile.Elixir do
240248
all = opts[:force] || Mix.Utils.stale?(check_files, [manifest]) || path_deps_changed?(manifest)
241249
stale = if all, do: to_watch, else: Mix.Utils.extract_stale(to_watch, [manifest])
242250

243-
if stale != [] do
251+
files_to_path(manifest, stale, to_compile, compile_path, fn ->
244252
File.mkdir_p!(compile_path)
245253
Code.prepend_path(compile_path)
246-
247254
set_compiler_opts(project, opts, [])
248-
files_to_path(manifest, stale, to_compile, compile_path)
249-
:ok
250-
else
251-
:noop
252-
end
255+
end)
253256
end
254257

255258
@doc """
@@ -271,7 +274,7 @@ defmodule Mix.Tasks.Compile.Elixir do
271274
in between modules, which helps it recompile only the modules that
272275
have changed at runtime.
273276
"""
274-
defdelegate files_to_path(manifest, stale, all, path), to: ManifestCompiler
277+
defdelegate files_to_path(manifest, stale, all, path, on_start), to: ManifestCompiler
275278

276279
defp set_compiler_opts(project, opts, extra) do
277280
opts = Dict.take(opts, [:docs, :debug_info, :ignore_module_conflict, :warnings_as_errors])

0 commit comments

Comments
 (0)