Browse Source

Fix default .app.src file for rebar_app_info

The finding of the file was done based on an assumed 'src' path which
may not be correct. This patch instead replaces the value with a lookup
in configured paths and returns the first that matches to an existing
file.
pull/1486/head
Fred Hebert 8 years ago
parent
commit
ab1f93d6fa
2 changed files with 29 additions and 13 deletions
  1. +6
    -7
      src/rebar_app_info.erl
  2. +23
    -6
      test/rebar_src_dirs_SUITE.erl

+ 6
- 7
src/rebar_app_info.erl View File

@ -248,13 +248,12 @@ set(AppInfo=#app_info_t{opts=Opts}, Key, Value) ->
%% @doc finds the .app.src file for an app, if any.
-spec app_file_src(t()) -> file:filename_all() | undefined.
app_file_src(#app_info_t{app_file_src=undefined, dir=Dir, name=Name}) ->
AppFileSrc = filename:join([ec_cnv:to_list(Dir), "src", ec_cnv:to_list(Name)++".app.src"]),
case filelib:is_file(AppFileSrc) of
true ->
AppFileSrc;
false ->
undefined
app_file_src(#app_info_t{app_file_src=undefined, dir=Dir, name=Name, opts=Opts}) ->
CandidatePaths = [filename:join([ec_cnv:to_list(Dir), Src, ec_cnv:to_list(Name)++".app.src"])
|| Src <- rebar_opts:get(Opts, src_dirs, ["src"])],
case lists:dropwhile(fun(Path) -> not filelib:is_file(Path) end, CandidatePaths) of
[] -> undefined;
[AppFileSrc|_] -> AppFileSrc
end;
app_file_src(#app_info_t{app_file_src=AppFileSrc}) ->
ec_cnv:to_list(AppFileSrc).

+ 23
- 6
test/rebar_src_dirs_SUITE.erl View File

@ -16,9 +16,11 @@
build_basic_app/1,
build_multi_apps/1,
src_dir_takes_precedence_over_extra/1,
src_dir_checkout_dep/1]).
src_dir_checkout_dep/1,
app_src_info/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
suite() ->
[].
@ -41,7 +43,7 @@ all() ->
dupe_src_dirs_at_root_and_in_erl_opts,
extra_src_dirs_at_root_and_in_erl_opts,
build_basic_app, build_multi_apps, src_dir_takes_precedence_over_extra,
src_dir_checkout_dep].
src_dir_checkout_dep, app_src_info].
src_dirs_at_root(Config) ->
AppDir = ?config(apps, Config),
@ -301,9 +303,24 @@ src_dir_checkout_dep(Config) ->
Config, RebarConfig, ["compile"],
{ok, [{checkout, DepName}, {app, AppName}]}
),
ok.
% {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
% ["bar", "baz", "foo", "qux"] = rebar_dir:src_dirs(rebar_state:opts(State), []),
% rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"],
% {ok, [{app, Name}]}),
app_src_info(Config) ->
PrivDir = ?config(priv_dir, Config),
AppName1 = rebar_test_utils:create_random_name("app_src_info"),
AppDir1 = filename:join(PrivDir, AppName1),
{ok, Info1} = rebar_app_info:new(AppName1, "1.0.0", AppDir1),
AppSrc1 = filename:join([AppDir1, "src", AppName1 ++ ".app.src"]),
ok = filelib:ensure_dir(AppSrc1),
ok = file:write_file(AppSrc1, "[]."),
?assertEqual(AppSrc1, rebar_app_info:app_file_src(Info1)),
AppName2 = rebar_test_utils:create_random_name("app_src_info"),
AppDir2 = filename:join(PrivDir, AppName2),
{ok, Info2Tmp} = rebar_app_info:new(AppName2, "1.0.0", AppDir2),
Info2 = rebar_app_info:set(Info2Tmp, src_dirs, ["foo", "bar", "baz"]),
AppSrc2 = filename:join([AppDir2, "bar", AppName2 ++ ".app.src"]),
ok = filelib:ensure_dir(AppSrc2),
ok = file:write_file(AppSrc2, "[]."),
?assertEqual(AppSrc2, rebar_app_info:app_file_src(Info2)),
ok.

Loading…
Cancel
Save