diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_control.erl | 48 | ||||
| -rw-r--r-- | src/rabbit_misc.erl | 37 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 6 |
3 files changed, 45 insertions, 46 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index ff15b9137d..f0b623c2dc 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -32,7 +32,7 @@ -module(rabbit_control). -include("rabbit.hrl"). --export([start/0, stop/0, action/5, get_options/2]). +-export([start/0, stop/0, action/5]). -define(RPC_TIMEOUT, infinity). @@ -45,16 +45,12 @@ -ifdef(use_specs). --type(optdef() :: {flag, string()} | {option, string(), any()}). - -spec(start/0 :: () -> no_return()). -spec(stop/0 :: () -> 'ok'). -spec(action/5 :: (atom(), node(), [string()], [{string(), any()}], fun ((string(), [any()]) -> 'ok')) -> 'ok'). --spec(get_options/2 :: ([optdef()], [string()]) - -> {[string()], [{string(), any()}]}). -spec(usage/0 :: () -> no_return()). -endif. @@ -69,9 +65,10 @@ start() -> _ -> ok end, {[Command0 | Args], Opts} = - get_options([{flag, ?QUIET_OPT}, {option, ?NODE_OPT, NodeStr}, - {option, ?VHOST_OPT, "/"}, {option, ?SCOPE_OPT, "client"}], - FullCommand), + rabbit_misc:get_options( + [{flag, ?QUIET_OPT}, {option, ?NODE_OPT, NodeStr}, + {option, ?VHOST_OPT, "/"}, {option, ?SCOPE_OPT, "client"}], + FullCommand), Opts1 = lists:map(fun({K, V}) -> case K of ?NODE_OPT -> {?NODE_OPT, rabbit_misc:makenode(V)}; @@ -386,38 +383,3 @@ prettify_typed_amqp_value(Type, Value) -> array -> [prettify_typed_amqp_value(T, V) || {T, V} <- Value]; _ -> Value end. - - -% Separate flags and options from arguments. -% get_options([{flag, "-q"}, {option, "-p", "/"}], -% ["set_permissions","-p","/","guest", -% "-q",".*",".*",".*"]) -% == {["set_permissions","guest",".*",".*",".*"], -% [{"-q",true},{"-p","/"}]} -get_options(Defs, As) -> - lists:foldl(fun(Def, {AsIn, RsIn}) -> - {AsOut, Value} = case Def of - {flag, Key} -> - get_flag(Key, AsIn); - {option, Key, Default} -> - get_option(Key, Default, AsIn) - end, - {AsOut, [{Key, Value} | RsIn]} - end, {As, []}, Defs). - -get_option(K, _Default, [K, V | As]) -> - {As, V}; -get_option(K, Default, [Nk | As]) -> - {As1, V} = get_option(K, Default, As), - {[Nk | As1], V}; -get_option(_, Default, As) -> - {As, Default}. - -get_flag(K, [K | As]) -> - {As, true}; -get_flag(K, [Nk | As]) -> - {As1, V} = get_flag(K, As), - {[Nk | As1], V}; -get_flag(_, []) -> - {[], false}. - diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 050b499f0f..1b49264611 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -64,6 +64,7 @@ -export([version_compare/2, version_compare/3]). -export([recursive_delete/1, dict_cons/3, orddict_cons/3, unlink_and_capture_exit/1]). +-export([get_options/2]). -import(mnesia). -import(lists). @@ -79,6 +80,7 @@ -type(ok_or_error() :: rabbit_types:ok_or_error(any())). -type(thunk(T) :: fun(() -> T)). -type(resource_name() :: binary()). +-type(optdef() :: {flag, string()} | {option, string(), any()}). -spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) -> rabbit_framing:amqp_method_name()). @@ -182,6 +184,8 @@ -spec(orddict_cons/3 :: (any(), any(), orddict:dictionary()) -> orddict:dictionary()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). +-spec(get_options/2 :: ([optdef()], [string()]) + -> {[string()], [{string(), any()}]}). -endif. @@ -701,3 +705,36 @@ unlink_and_capture_exit(Pid) -> receive {'EXIT', Pid, _} -> ok after 0 -> ok end. + +% Separate flags and options from arguments. +% get_options([{flag, "-q"}, {option, "-p", "/"}], +% ["set_permissions","-p","/","guest", +% "-q",".*",".*",".*"]) +% == {["set_permissions","guest",".*",".*",".*"], +% [{"-q",true},{"-p","/"}]} +get_options(Defs, As) -> + lists:foldl(fun(Def, {AsIn, RsIn}) -> + {AsOut, Value} = case Def of + {flag, Key} -> + get_flag(Key, AsIn); + {option, Key, Default} -> + get_option(Key, Default, AsIn) + end, + {AsOut, [{Key, Value} | RsIn]} + end, {As, []}, Defs). + +get_option(K, _Default, [K, V | As]) -> + {As, V}; +get_option(K, Default, [Nk | As]) -> + {As1, V} = get_option(K, Default, As), + {[Nk | As1], V}; +get_option(_, Default, As) -> + {As, Default}. + +get_flag(K, [K | As]) -> + {As, true}; +get_flag(K, [Nk | As]) -> + {As1, V} = get_flag(K, As), + {[Nk | As1], V}; +get_flag(_, []) -> + {[], false}. diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index eaf5bc7e52..e6163d45d0 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -739,7 +739,7 @@ test_option_parser() -> % get options ok = check_get_options( {["mock_command"], [{"-foo", "bar"}, {"-baz", "notbaz"}]}, - [{option, "-foo", "notfoo"}, {option, "-bax", "notbaz"}], + [{option, "-foo", "notfoo"}, {option, "-baz", "notbaz"}], ["mock_command", "-foo", "bar"]), % shuffled and interleaved arguments and options @@ -1327,8 +1327,8 @@ expand_options(As, Bs) -> end, Bs, As). check_get_options({ExpArgs, ExpOpts}, Defs, Args) -> - {ExpArgs, ResOpts} = rabbit_control:get_options(Defs, Args), - lists:sort(ExpOpts) == lists:sort(ResOpts), % don't care about the order + {ExpArgs, ResOpts} = rabbit_misc:get_options(Defs, Args), + true = lists:sort(ExpOpts) == lists:sort(ResOpts), % don't care about the order ok. empty_files(Files) -> |
