Permalink
Browse files

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)).
  • Loading branch information...
jcomellas authored and tuncer committed Feb 22, 2011
1 parent 90d2ce5 commit 58661a92e205b44a5090f9a2c4371a94bab692ec
Showing with 14 additions and 1 deletion.
  1. +4 −0 src/rebar_core.erl
  2. +10 −1 src/rebar_utils.erl
View
@@ -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
View
@@ -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
%% ====================================================================

0 comments on commit 58661a9

Please sign in to comment.