diff options
-rw-r--r-- | src/rebar_dir.erl | 32 | ||||
-rw-r--r-- | src/rebar_relx.erl | 10 |
2 files changed, 31 insertions, 11 deletions
diff --git a/src/rebar_dir.erl b/src/rebar_dir.erl index 3190425..8cdf196 100644 --- a/src/rebar_dir.erl +++ b/src/rebar_dir.erl @@ -3,6 +3,7 @@ -export([base_dir/1, profile_dir/2, + profile_dir_name/1, deps_dir/1, deps_dir/2, root_dir/1, @@ -39,18 +40,31 @@ base_dir(State) -> %% @doc returns the directory root for build artifacts for a given set %% of profiles. --spec profile_dir(rebar_dict(), [atom()]) -> file:filename_all(). +-spec profile_dir(rebar_dict(), [atom(), ...]) -> file:filename_all(). profile_dir(Opts, Profiles) -> - {BaseDir, ProfilesStrings} = case [rebar_utils:to_list(P) || P <- Profiles] of - ["global" | _] -> {?MODULE:global_cache_dir(Opts), [""]}; - ["bootstrap", "default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]}; - ["default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]}; + BasePath = + case Profiles of + [global | _] -> ?MODULE:global_cache_dir(Opts); + [_|_] -> rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR) + end, + DirName = profile_dir_name(Profiles), + filename:join(BasePath, DirName). + +%% @doc returns the directory name for build artifacts for a given set +%% of profiles. +-spec profile_dir_name([atom(), ...] | rebar_state:t()) -> file:filename_all(). +profile_dir_name(Profiles) + when is_list(Profiles) -> + case [rebar_utils:to_list(P) || P <- Profiles] of + ["global" | _] -> ""; + ["bootstrap", "default"] -> "default"; + ["default"] -> "default"; %% drop `default' from the profile dir if it's implicit and reverse order %% of profiles to match order passed to `as` - ["default"|Rest] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), Rest} - end, - ProfilesDir = rebar_string:join(ProfilesStrings, "+"), - filename:join(BaseDir, ProfilesDir). + ["default"|NonDefaultNames] -> rebar_string:join(NonDefaultNames, "+") + end; +profile_dir_name(State) -> + profile_dir_name(rebar_state:current_profiles(State)). %% @doc returns the directory where dependencies should be placed %% given the current profile. diff --git a/src/rebar_relx.erl b/src/rebar_relx.erl index 431e1bc..996c0a3 100644 --- a/src/rebar_relx.erl +++ b/src/rebar_relx.erl @@ -27,10 +27,12 @@ do(Module, Command, Provider, State) -> LibDirs = rebar_utils:filtermap(fun ec_file:exists/1, [rebar_dir:checkouts_dir(State), DepsDir | ProjectAppDirs]), OutputDir = filename:join(rebar_dir:base_dir(State), ?DEFAULT_RELEASE_DIR), + ProfileString = rebar_dir:profile_dir_name(State), AllOptions = rebar_string:join([Command | Options], " "), Cwd = rebar_state:dir(State), Providers = rebar_state:providers(State), RebarOpts = rebar_state:opts(State), + ExtraOverlays = [{profile_string, ProfileString}], ErlOpts = rebar_opts:erl_opts(RebarOpts), rebar_hooks:run_project_and_app_hooks(Cwd, pre, Provider, Providers, State), try @@ -38,14 +40,18 @@ do(Module, Command, Provider, State) -> [] -> relx:main([{lib_dirs, LibDirs} ,{caller, api} - ,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions); + ,{log_level, LogLevel} + ,{api_caller_overlays, ExtraOverlays} + | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions); Config -> Config1 = [{overlay_vars, [{base_dir, rebar_dir:base_dir(State)}]} | merge_overlays(Config)], relx:main([{lib_dirs, LibDirs} ,{config, Config1} ,{caller, api} - ,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions) + ,{log_level, LogLevel} + ,{api_caller_overlays, ExtraOverlays} + | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions) end, rebar_hooks:run_project_and_app_hooks(Cwd, post, Provider, Providers, State), {ok, State} |