Skip to content

Commit f931052

Browse files
authored
Revert "Fix unnecessary recompilation when dbg_callback is modified at runtime (#15007)" (#15185)
This reverts commit c80a3b1.
1 parent 57b0e29 commit f931052

3 files changed

Lines changed: 2 additions & 45 deletions

File tree

lib/elixir/src/elixir.erl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,6 @@ start(_Type, _Args) ->
6363
application:set_env(elixir, ansi_enabled, prim_tty:isatty(stdout) == true)
6464
end,
6565

66-
%% Store the initial dbg_callback value before any runtime modifications.
67-
%% This allows Mix compiler to detect config changes vs runtime changes
68-
%% (e.g., Kino wrapping dbg_callback at runtime should not trigger recompilation).
69-
{ok, InitialDbgCallback} = application:get_env(elixir, dbg_callback),
70-
7166
Tokenizer = case code:ensure_loaded('Elixir.String.Tokenizer') of
7267
{module, Mod} -> Mod;
7368
_ -> elixir_tokenizer
@@ -96,7 +91,6 @@ start(_Type, _Args) ->
9691
{ignore_already_consolidated, false},
9792
{ignore_module_conflict, false},
9893
{infer_signatures, [elixir]},
99-
{initial_dbg_callback, InitialDbgCallback},
10094
{module_definition, compiled},
10195
{no_warn_undefined, []},
10296
{on_undefined_variable, raise},

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -311,13 +311,7 @@ defmodule Mix.Compilers.Elixir do
311311
end
312312

313313
defp deps_config_compile_env_apps(deps_config) do
314-
# Use initial_dbg_callback instead of dbg_callback to ignore runtime modifications.
315-
# Tools like Kino modify dbg_callback at runtime to customize dbg/2 behavior,
316-
# but this should not trigger recompilation since the config hasn't actually changed.
317-
# initial_dbg_callback is set when :elixir app starts, before any runtime modifications.
318-
initial_dbg = :elixir_config.get(:initial_dbg_callback)
319-
320-
if deps_config[:dbg] != initial_dbg do
314+
if deps_config[:dbg] != Application.fetch_env!(:elixir, :dbg_callback) do
321315
[:elixir]
322316
else
323317
[]

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

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,9 @@ defmodule Mix.Tasks.Compile.ElixirTest do
278278
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
279279
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
280280

281-
# Simulate a config change by updating both dbg_callback and initial_dbg_callback.
282-
# This represents the case where the user actually changed the config file.
281+
# Change the dbg_callback at runtime
283282
File.touch!("_build/dev/lib/sample/.mix/compile.elixir", @old_time)
284283
Application.put_env(:elixir, :dbg_callback, {__MODULE__, :dbg, []})
285-
:elixir_config.put(:initial_dbg_callback, {__MODULE__, :dbg, []})
286284

287285
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
288286
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
@@ -291,35 +289,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
291289
end)
292290
after
293291
Application.put_env(:elixir, :dbg_callback, {Macro, :dbg, []})
294-
:elixir_config.put(:initial_dbg_callback, {Macro, :dbg, []})
295-
end
296-
297-
test "does not recompile when dbg_callback is modified at runtime but initial is unchanged" do
298-
in_fixture("no_mixfile", fn ->
299-
Mix.Project.push(MixTest.Case.Sample)
300-
301-
File.write!("lib/a.ex", """
302-
defmodule A do
303-
def a, do: dbg(:ok)
304-
end
305-
""")
306-
307-
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
308-
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
309-
310-
# Simulate a tool like Kino modifying dbg_callback at runtime.
311-
# Since initial_dbg_callback remains unchanged, this should NOT trigger recompilation.
312-
original_dbg = Application.fetch_env!(:elixir, :dbg_callback)
313-
:elixir_config.put(:initial_dbg_callback, original_dbg)
314-
Application.put_env(:elixir, :dbg_callback, {SomeDebugTool, :dbg, [original_dbg]})
315-
316-
# Should NOT trigger recompilation since initial_dbg_callback is unchanged
317-
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:noop, []}
318-
refute_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
319-
end)
320-
after
321-
Application.put_env(:elixir, :dbg_callback, {Macro, :dbg, []})
322-
:elixir_config.put(:initial_dbg_callback, {Macro, :dbg, []})
323292
end
324293

325294
test "recompiles files on debug_info flag" do

0 commit comments

Comments
 (0)