Browse Source

Corrects a fix to src_dir values

The previous patch at #7c959cc fixed the usage of duplicate values
for directories through relative paths, but mistakenly went overboard
and dropped the `./` path, which is still fairly common. Similarly for
`../".

The code is modified to special-case such values and keep the code
working.
pull/1637/head
Fred Hebert 7 years ago
parent
commit
cf83eb7fc4
2 changed files with 6 additions and 3 deletions
  1. +3
    -1
      src/rebar_dir.erl
  2. +3
    -2
      test/rebar_dir_SUITE.erl

+ 3
- 1
src/rebar_dir.erl View File

@ -197,8 +197,10 @@ make_normalized_path([], NormalizedPath) ->
filename:join(lists:reverse(NormalizedPath));
make_normalized_path([H|T], NormalizedPath) ->
case H of
"." when NormalizedPath == [], T == [] -> make_normalized_path(T, ["."]);
"." -> make_normalized_path(T, NormalizedPath);
".." -> make_normalized_path(T, tl(NormalizedPath));
".." when NormalizedPath == [] -> make_normalized_path(T, [".."]);
".." when hd(NormalizedPath) =/= ".." -> make_normalized_path(T, tl(NormalizedPath));
_ -> make_normalized_path(T, [H|NormalizedPath])
end.

+ 3
- 2
test/rebar_dir_SUITE.erl View File

@ -68,10 +68,11 @@ default_all_src_dirs(Config) ->
["src", "test"] = rebar_dir:all_src_dirs(rebar_state:opts(State), ["src"], ["test"]).
src_dirs(Config) ->
RebarConfig = [{erl_opts, [{src_dirs, ["foo", "./bar", "bar", "bar/", "./bar/", "baz"]}]}],
RebarConfig = [{erl_opts, [{src_dirs, ["foo", "./bar", "bar", "bar/", "./bar/", "baz",
"./", ".", "../", "..", "./../", "../.", ".././../"]}]}],
{ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
["bar", "baz", "foo"] = rebar_dir:src_dirs(rebar_state:opts(State)).
[".", "..", "../..", "bar", "baz", "foo"] = rebar_dir:src_dirs(rebar_state:opts(State)).
src_dirs_with_opts(Config) ->
RebarConfig = [{erl_opts, [{src_dirs, ["foo", "bar", "baz"]},

Loading…
Cancel
Save