Ver a proveniência

add 'as' higher order task

pull/56/head
Tristan Sloughter há 10 anos
ascendente
cometimento
789761e64d
5 ficheiros alterados com 70 adições e 20 eliminações
  1. +2
    -1
      src/rebar.app.src
  2. +3
    -8
      src/rebar3.erl
  3. +7
    -5
      src/rebar_core.erl
  4. +52
    -0
      src/rebar_prv_as.erl
  5. +6
    -6
      src/rebar_prv_do.erl

+ 2
- 1
src/rebar.app.src Ver ficheiro

@ -22,7 +22,8 @@
{log_level, warn},
%% any_dir processing modules
{providers, [rebar_prv_clean,
{providers, [rebar_prv_as,
rebar_prv_clean,
rebar_prv_deps,
rebar_prv_dialyzer,
rebar_prv_do,

+ 3
- 8
src/rebar3.erl Ver ficheiro

@ -127,7 +127,7 @@ run_aux(State, GlobalPluginProviders, RawArgs) ->
State5 = rebar_state:create_logic_providers(AllProviders, State4),
{Task, Args} = parse_args(RawArgs),
rebar_core:process_command(rebar_state:command_args(State5, Args), list_to_atom(Task)).
rebar_core:process_command(rebar_state:command_args(State5, Args), Task).
init_config() ->
%% Initialize logging system
@ -177,10 +177,6 @@ init_config() ->
%% Initialize vsn cache
{PluginProviders, rebar_state:set(State1, vsn_cache, dict:new())}.
%%
%% Parse command line arguments using getopt and also filtering out any
%% key=value pairs. What's left is the list of commands to run
%%
parse_args([]) ->
parse_args(["help"]);
parse_args([H | Rest]) when H =:= "-h"
@ -189,8 +185,8 @@ parse_args([H | Rest]) when H =:= "-h"
parse_args([H | Rest]) when H =:= "-v"
; H =:= "--version" ->
parse_args(["version" | Rest]);
parse_args([RawTask | RawRest]) ->
{RawTask, RawRest}.
parse_args([Task | RawRest]) ->
{list_to_atom(Task), RawRest}.
set_options(State, {Options, NonOptArgs}) ->
GlobalDefines = proplists:get_all_values(defines, Options),
@ -251,7 +247,6 @@ global_option_spec_list() ->
[
%% {Name, ShortOpt, LongOpt, ArgSpec, HelpMsg}
{help, $h, "help", undefined, "Print this help."},
%{verbose, $v, "verbose", integer, "Verbosity level (-v, -vv)."},
{version, $V, "version", undefined, "Show version information."},
%{config, $C, "config", string, "Rebar config file to use."},
{task, undefined, undefined, string, "Task to run."}

+ 7
- 5
src/rebar_core.erl Ver ficheiro

@ -40,13 +40,15 @@ process_command(State, Command) ->
not_found ->
{error, io_lib:format("Command ~p not found", [Command])};
CommandProvider ->
Profile = providers:profile(CommandProvider),
State1 = rebar_state:apply_profiles(State, [Profile]),
Opts = providers:opts(CommandProvider)++rebar3:global_option_spec_list(),
case Command of
do ->
do(TargetProviders, State1);
Command when Command =:= do
; Command =:= as ->
do(TargetProviders, State);
_ ->
Profile = providers:profile(CommandProvider),
State1 = rebar_state:apply_profiles(State, [Profile]),
Opts = providers:opts(CommandProvider)++rebar3:global_option_spec_list(),
case getopt:parse(Opts, rebar_state:command_args(State1)) of
{ok, Args} ->
State2 = rebar_state:command_parsed_args(State1, Args),

+ 52
- 0
src/rebar_prv_as.erl Ver ficheiro

@ -0,0 +1,52 @@
%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ts=4 sw=4 et
-module(rebar_prv_as).
-behaviour(provider).
-export([init/1,
do/1,
format_error/1]).
-include("rebar.hrl").
-define(PROVIDER, as).
-define(DEPS, []).
%% ===================================================================
%% Public API
%% ===================================================================
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
State1 = rebar_state:add_provider(State, providers:create([{name, ?PROVIDER},
{module, ?MODULE},
{bare, false},
{deps, ?DEPS},
{example, "rebar3 as <profile1>,<profile2>,... <task1>, <task2>, ..."},
{short_desc, "Higher order provider for running multiple tasks in a sequence as a certain profile."},
{desc, ""},
{opts, [{profile, undefined, undefined, string, "Profile to run as."}]}])),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
[Profile | Rest] = rebar_state:command_args(State),
Tasks = args_to_tasks(Rest),
Profiles = [list_to_atom(X) || X <- string:tokens(Profile, ",")],
State1 = rebar_state:apply_profiles(State, Profiles),
lists:foldl(fun(TaskArgs, {ok, StateAcc}) ->
[TaskStr | Args] = string:tokens(TaskArgs, " "),
Task = list_to_atom(TaskStr),
StateAcc1 = rebar_state:set(StateAcc, task, Task),
StateAcc2 = rebar_state:command_args(StateAcc1, Args),
rebar_core:process_command(StateAcc2, Task)
end, {ok, State1}, Tasks).
-spec format_error(any()) -> iolist().
format_error(Reason) ->
io_lib:format("~p", [Reason]).
args_to_tasks(Args) ->
[string:strip(T) || T <- string:tokens(string:join(Args, " "), ",")].

+ 6
- 6
src/rebar_prv_do.erl Ver ficheiro

@ -34,12 +34,12 @@ init(State) ->
do(State) ->
Tasks = args_to_tasks(rebar_state:command_args(State)),
lists:foldl(fun(TaskArgs, {ok, StateAcc}) ->
[TaskStr | Args] = string:tokens(TaskArgs, " "),
Task = list_to_atom(TaskStr),
StateAcc1 = rebar_state:set(StateAcc, task, Task),
StateAcc2 = rebar_state:command_args(StateAcc1, Args),
rebar_core:process_command(StateAcc2, Task)
end, {ok, State}, Tasks).
[TaskStr | Args] = string:tokens(TaskArgs, " "),
Task = list_to_atom(TaskStr),
StateAcc1 = rebar_state:set(StateAcc, task, Task),
StateAcc2 = rebar_state:command_args(StateAcc1, Args),
rebar_core:process_command(StateAcc2, Task)
end, {ok, State}, Tasks).
-spec format_error(any()) -> iolist().
format_error(Reason) ->

Carregando…
Cancelar
Guardar