diff options
author | Tristan Sloughter <tristan.sloughter@gmail.com> | 2015-05-20 13:12:20 -0500 |
---|---|---|
committer | Tristan Sloughter <tristan.sloughter@gmail.com> | 2015-05-20 13:12:20 -0500 |
commit | 8c6af888b208fc9151bbf37c4d85334d67554dd4 (patch) | |
tree | dc252d15042fb66d31815200e70c77ec563c900e /src/rebar_utils.erl | |
parent | f9c9e0eacca3e9e42cf7dccbb178dd6c7b8f5c68 (diff) | |
parent | 529025b6fdee96e0d9f487ebc20ce03e387910ca (diff) |
Merge pull request #442 from tsloughter/tests_replace_paths
purge loaded code when it conflicts with project apps in tests
Diffstat (limited to 'src/rebar_utils.erl')
-rw-r--r-- | src/rebar_utils.erl | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index 160d547..ffa29e6 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -47,6 +47,7 @@ deprecated/4, erl_opts/1, indent/1, + update_code/1, cleanup_code_path/1, args_to_tasks/1, expand_env_variable/3, @@ -563,6 +564,23 @@ filter_defines([Opt | Rest], Acc) -> indent(Amount) when erlang:is_integer(Amount) -> [?ONE_LEVEL_INDENT || _ <- lists:seq(1, Amount)]. +%% Replace code paths with new paths for existing apps and +%% purge code of the old modules from those apps. +update_code(Paths) -> + lists:foreach(fun(Path) -> + Name = filename:basename(Path, "/ebin"), + App = list_to_atom(Name), + application:load(App), + case application:get_key(App, modules) of + undefined -> + code:add_patha(Path), + ok; + {ok, Modules} -> + code:replace_path(Name, Path), + [begin code:purge(M), code:delete(M) end || M <- Modules] + end + end, Paths). + cleanup_code_path(OrigPath) -> CurrentPath = code:get_path(), AddedPaths = CurrentPath -- OrigPath, |