From c87f2a2c73ccdff29c0b320070c5599716b47fca Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Sat, 30 May 2015 14:50:09 +0000 Subject: Optionally allow node names to the rebar3 shell. Helps with integration efforts, but unfortunately can't support the '-sname' and '-name' options, only '--sname' and '--name'. --- src/rebar_prv_shell.erl | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/rebar_prv_shell.erl b/src/rebar_prv_shell.erl index 5110f52..c80badf 100644 --- a/src/rebar_prv_shell.erl +++ b/src/rebar_prv_shell.erl @@ -57,7 +57,11 @@ init(State) -> {desc, info()}, {opts, [{config, undefined, "config", string, "Path to the config file to use. Defaults to the " - "sys_config defined for relx, if present."}]} + "sys_config defined for relx, if present."}, + {name, undefined, "name", atom, + "Gives a long name to the node."}, + {sname, undefined, "sname", atom, + "Gives a short name to the node."}]} ]) ), {ok, State1}. @@ -79,6 +83,7 @@ format_error(Reason) -> %% immediately kill the script. ctrl-g, however, works fine shell(State) -> + setup_name(State), setup_paths(State), maybe_boot_apps(State), setup_shell(), @@ -117,17 +122,6 @@ setup_paths(State) -> %% add project app test paths ok = add_test_paths(State). -reread_config(State) -> - case find_config(State) of - no_config -> - ok; - ConfigList -> - _ = [application:set_env(Application, Key, Val) - || {Application, Items} <- ConfigList, - {Key, Val} <- Items], - ok - end. - maybe_boot_apps(State) -> case find_apps_to_boot(State) of undefined -> @@ -140,6 +134,19 @@ maybe_boot_apps(State) -> boot_apps(Apps) end. +setup_name(State) -> + {Opts, _} = rebar_state:command_parsed_args(State), + case {proplists:get_value(name, Opts), proplists:get_value(sname, Opts)} of + {undefined, undefined} -> + ok; + {Name, undefined} -> + net_kernel:start([Name, longnames]); + {undefined, SName} -> + net_kernel:start([SName, shortnames]); + {_, _} -> + ?ABORT("Cannot have both short and long node names defined", []) + end. + find_apps_to_boot(State) -> %% Try the shell_apps option case rebar_state:get(State, shell_apps, undefined) of @@ -164,6 +171,17 @@ load_apps(Apps) -> not lists:keymember(App, 1, application:loaded_applications())], ok. +reread_config(State) -> + case find_config(State) of + no_config -> + ok; + ConfigList -> + _ = [application:set_env(Application, Key, Val) + || {Application, Items} <- ConfigList, + {Key, Val} <- Items], + ok + end. + boot_apps(Apps) -> ?WARN("The rebar3 shell is a development tool; to deploy " "applications in production, consider using releases " -- cgit v1.1