summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_prv_shell.erl33
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) ->