Delete defined modules if evaluation fails (#1528)

This commit is contained in:
Jonatan Kłosko 2022-11-12 19:39:59 +01:00 committed by GitHub
parent dc5be4a241
commit 9c9c54de65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View file

@ -350,10 +350,11 @@ defmodule Livebook.Runtime.Evaluator do
eval_result = eval(code, context.binding, context.env)
evaluation_time_ms = time_diff_ms(start_time)
tracer_info = Evaluator.IOProxy.get_tracer_info(state.io_proxy)
{new_context, result, code_error, identifiers_used, identifiers_defined} =
case eval_result do
{:ok, value, binding, env} ->
tracer_info = Evaluator.IOProxy.get_tracer_info(state.io_proxy)
context_id = random_id()
new_context = %{
@ -370,6 +371,10 @@ defmodule Livebook.Runtime.Evaluator do
{new_context, result, nil, identifiers_used, identifiers_defined}
{:error, kind, error, stacktrace, code_error} ->
for {module, _} <- tracer_info.modules_defined do
delete_module!(module)
end
result = {:error, kind, error, stacktrace}
identifiers_used = :unknown
identifiers_defined = %{}

View file

@ -334,6 +334,20 @@ defmodule Livebook.Runtime.EvaluatorTest do
assert {:docs_v1, _, _, _, _, _, _} = Code.fetch_docs(Livebook.Runtime.EvaluatorTest.Disk)
end
test "deletes defined modules if the evaluation fails", %{evaluator: evaluator} do
code = """
defmodule Livebook.Runtime.EvaluatorTest.Raised do
end
raise "failed"
"""
Evaluator.evaluate_code(evaluator, code, :code_1, [])
assert_receive {:runtime_evaluation_response, :code_1, {:error, _, _, _}, metadata()}
refute Code.ensure_loaded?(Livebook.Runtime.EvaluatorTest.Raised)
end
@tag :with_ebin_path
test "runs doctests when a module is defined", %{evaluator: evaluator} do
code = ~S'''