diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2019-02-04 14:38:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-04 14:38:09 -0500 |
commit | 38e1964101906aa79e6d839d9a43dabcb1ddb0b5 (patch) | |
tree | f0c8c65824fabb52ccd60d788c2a54aa737e6aff | |
parent | cddc0cb7cad0cd61ae9fe738125807e2878b6419 (diff) | |
parent | 85f5c645fa92f1935810cf6e5594d8c958a9d149 (diff) |
Merge pull request #2011 from ferd/release-switch-in-shell
Add --relvsn and --relname to rebar3 shell
-rw-r--r-- | src/rebar_prv_shell.erl | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/rebar_prv_shell.erl b/src/rebar_prv_shell.erl index 4ba3c39..c0cfd6d 100644 --- a/src/rebar_prv_shell.erl +++ b/src/rebar_prv_shell.erl @@ -78,6 +78,12 @@ init(State) -> "shell. (E.g. --apps app1,app2,app3) Defaults " "to rebar.config {shell, [{apps, Apps}]} or " "relx apps if not specified."}, + {relname, $r, "relname", atom, + "Name of the release to use as a template for the " + "shell session"}, + {relvsn, $v, "relvsn", string, + "Version of the release to use for the shell " + "session"}, {start_clean, undefined, "start-clean", boolean, "Cancel any applications in the 'apps' list " "or release."}, @@ -357,15 +363,30 @@ find_apps_rebar(State) -> -spec find_apps_relx(rebar_state:t()) -> no_value | list(). find_apps_relx(State) -> - case lists:keyfind(release, 1, rebar_state:get(State, relx, [])) of - {_, _, Apps} -> + {Opts, _} = rebar_state:command_parsed_args(State), + RelxOpts = rebar_state:get(State, relx, []), + {Defname, Defvsn} = debug_get_value(default_release, RelxOpts, + {undefined, undefined}, + "Found default release from config"), + Relname = debug_get_value(relname, Opts, Defname, + "Found relname from command line option"), + Relvsn = debug_get_value(relvsn, Opts, Defvsn, + "Found relvsn from command line option"), + Releases = [Rel || Rel <- rebar_state:get(State, relx, []), + is_tuple(Rel), element(1, Rel) =:= release, + tuple_size(Rel) =:= 3 orelse tuple_size(Rel) =:= 4, + {Name, Vsn} <- [element(2, Rel)], + Relname == undefined orelse Name == Relname, + Relvsn == undefined orelse Vsn == Relvsn], + case Releases of + [] -> + no_value; + [{_, _, Apps}|_] -> ?DEBUG("Found shell apps from relx.", []), Apps; - {_, _, Apps, _} -> + [{_, _, Apps, _}|_] -> ?DEBUG("Found shell apps from relx.", []), - Apps; - false -> - no_value + Apps end. load_apps(Apps) -> |