diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2019-10-04 10:55:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-04 10:55:45 -0400 |
commit | 8cdf023455bed2601b8bebe807b0c4acfecf5d0d (patch) | |
tree | 68be31c69ed37532a1e7944b08259fbaa020b568 /src | |
parent | bc8e5ef26a6206f1d671c556ab0d442620f1a046 (diff) | |
parent | df808931cc72348b5375e041e9b2821f660c1ef4 (diff) |
Merge pull request #2155 from g-andrade/feature/profile-string-overlay-var
Support `profile_string` overlay var in releases
Diffstat (limited to 'src')
-rw-r--r-- | src/rebar_dir.erl | 36 | ||||
-rw-r--r-- | src/rebar_relx.erl | 10 |
2 files changed, 34 insertions, 12 deletions
diff --git a/src/rebar_dir.erl b/src/rebar_dir.erl index aac6210..07d8a2c 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,33 @@ 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"]}; - %% drop `default` from the profile dir if it's implicit and reverse order + 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(rebar_state:t()) -> file:filename_all(). +profile_dir_name(State) -> + profile_dir_name_(rebar_state:current_profiles(State)). + +-spec profile_dir_name_([atom(), ...]) -> 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. %% @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} |