summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJuan Jose Comellas <juanjo@comellas.org>2011-02-22 01:58:46 -0300
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2011-02-26 15:57:17 +0100
commit58661a92e205b44a5090f9a2c4371a94bab692ec (patch)
treeeb33ccc6100abd474ecddfb1c6d7e6c434ecae35 /src
parent90d2ce5e0770be25179376af87ce861c33c1ba14 (diff)
Convert the entries in the code path to absolute paths
Rebar will exit with {error,bad_directory} when trying to restore the code path after it has finished working on a subdirectory if there are invalid relative paths in it. The problem was seen when executing the last line of rebar_erlc_compiler:doterl_compile/3 (true = code:set_path(CurrPath)).
Diffstat (limited to 'src')
-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
%% ====================================================================