From 44ab2dfd1ab5627496b04cafd56e8a494a926cc2 Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Thu, 4 Jul 2019 11:39:15 -0400 Subject: [PATCH] Ensure EDoc opts in umbrella apps are respected This adds an additional loading and merging of options for EDoc using the values from the top-level along with those specified in the rebar.config of an umbrella application. The app-specific config values are prepended to the global ones; this can likely cause some problems with manual path handling, but is unlikely to happen in practice and the rest seems to work fine based on order Fixes the issue in #2114 --- src/rebar_prv_edoc.erl | 5 ++++- test/rebar_edoc_SUITE.erl | 10 +++++++++- test/rebar_edoc_SUITE_data/foo/apps/foo/rebar.config | 1 + test/rebar_edoc_SUITE_data/foo/rebar.config | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 test/rebar_edoc_SUITE_data/foo/apps/foo/rebar.config create mode 100644 test/rebar_edoc_SUITE_data/foo/rebar.config diff --git a/src/rebar_prv_edoc.erl b/src/rebar_prv_edoc.erl index c78296af..5e563abf 100644 --- a/src/rebar_prv_edoc.erl +++ b/src/rebar_prv_edoc.erl @@ -45,7 +45,10 @@ do(State) -> AppName = rebar_utils:to_list(rebar_app_info:name(AppInfo)), ?INFO("Running edoc for ~ts", [AppName]), AppDir = rebar_app_info:dir(AppInfo), - AppRes = (catch edoc:application(list_to_atom(AppName), AppDir, EdocOptsAcc)), + AppOpts = rebar_app_info:opts(AppInfo), + %% order of the merge is important to allow app opts overrides + AppEdocOpts = rebar_opts:get(AppOpts, edoc_opts, []) ++ EdocOptsAcc, + AppRes = (catch edoc:application(list_to_atom(AppName), AppDir, AppEdocOpts)), rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, AppInfo, State), case {AppRes, ShouldAccPaths} of {ok, true} -> diff --git a/test/rebar_edoc_SUITE.erl b/test/rebar_edoc_SUITE.erl index 64ec0c83..2f0fad0a 100644 --- a/test/rebar_edoc_SUITE.erl +++ b/test/rebar_edoc_SUITE.erl @@ -52,7 +52,15 @@ multiapp(Config) -> "barer1")), ?assert(file_content_matches( filename:join([AppsDir, "apps", "foo", "doc", "foo.html"]), - "apps/bar1/doc/bar1.html")). + "apps/bar1/doc/bar1.html")), + %% Options such from rebar.config in the app themselves are + %% respected + ?assert(file_content_matches( + filename:join([AppsDir, "apps", "foo", "doc", "overview-summary.html"]), + "foo_custom_title" + )), + ok. + error_survival(Config) -> RebarConfig = [], diff --git a/test/rebar_edoc_SUITE_data/foo/apps/foo/rebar.config b/test/rebar_edoc_SUITE_data/foo/apps/foo/rebar.config new file mode 100644 index 00000000..970d4e28 --- /dev/null +++ b/test/rebar_edoc_SUITE_data/foo/apps/foo/rebar.config @@ -0,0 +1 @@ +{edoc_opts, [{title, "foo_custom_title"}]}. diff --git a/test/rebar_edoc_SUITE_data/foo/rebar.config b/test/rebar_edoc_SUITE_data/foo/rebar.config new file mode 100644 index 00000000..b5d44fa7 --- /dev/null +++ b/test/rebar_edoc_SUITE_data/foo/rebar.config @@ -0,0 +1 @@ +{edoc_opts, [{title, "forced wrong title to be overridden"}]}.