summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralisdair sullivan <alisdair.sullivan@askuity.com>2015-10-31 12:07:02 -0700
committeralisdair sullivan <alisdair.sullivan@askuity.com>2015-10-31 12:07:02 -0700
commit31cc213b813c7d7ed7bc1df072fa5b733975d5e1 (patch)
treec386337cf7c645eafbac79fcbe76df6fcb8f3a63 /src
parent591b018258ca321b9a67e1b44dc4bfd9104ae5ac (diff)
prevent rebar3 from reloading it's own path and terminating itself
prevents code reloading by temporary marking of rebar3's ebin dir as sticky during code refresh
Diffstat (limited to 'src')
-rw-r--r--src/rebar_utils.erl8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index 4fd4bd1..d00a46f 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -654,13 +654,19 @@ update_code(Paths) ->
code:add_patha(Path),
ok;
{ok, Modules} ->
+ %% stick rebar ebin dir before purging to prevent
+ %% inadvertent termination
+ RebarBin = code:lib_dir(rebar, ebin),
+ ok = code:stick_dir(RebarBin),
%% replace_path causes problems when running
%% tests in projects like erlware_commons that rebar3
%% also includes
%code:replace_path(App, Path),
code:del_path(App),
code:add_patha(Path),
- [begin code:purge(M), code:delete(M) end || M <- Modules]
+ [begin code:purge(M), code:delete(M) end || M <- Modules],
+ %% unstick rebar dir
+ ok = code:unstick_dir(RebarBin)
end
end, Paths).