summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_core.erl4
-rw-r--r--src/rebar_utils.erl11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/rebar_core.erl b/src/rebar_core.erl
index b390dc0..d92af34 100644
--- a/src/rebar_core.erl
+++ b/src/rebar_core.erl
@@ -76,6 +76,10 @@ process_commands([Command | Rest]) ->
lists:foreach(fun (D) -> erlang:erase({skip_dir, D}) end, skip_dirs()),
Operations = erlang:get(operations),
+ %% Convert the code path so that all the entries are absolute paths.
+ %% If not, code:set_path() may choke on invalid relative paths when trying
+ %% to restore the code path from inside a subdirectory.
+ true = rebar_utils:expand_code_path(),
_ = process_dir(rebar_utils:get_cwd(), rebar_config:new(),
Command, sets:new()),
case erlang:get(operations) of
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index 2822c0f..8898b8a 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -38,7 +38,8 @@
abort/2,
escript_foldl/3,
find_executable/1,
- prop_check/3]).
+ prop_check/3,
+ expand_code_path/0]).
-include("rebar.hrl").
@@ -156,6 +157,14 @@ find_executable(Name) ->
prop_check(true, _, _) -> true;
prop_check(false, Msg, Args) -> ?ABORT(Msg, Args).
+%% Convert all the entries in the code path to absolute paths.
+expand_code_path() ->
+ CodePath = lists:foldl(fun (Path, Acc) ->
+ [filename:absname(Path) | Acc]
+ end, [], code:get_path()),
+ code:set_path(lists:reverse(CodePath)).
+
+
%% ====================================================================
%% Internal functions
%% ====================================================================