summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTuncer Ayaz <tuncer.ayaz@gmail.com>2010-03-08 21:14:06 +0100
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2010-03-08 21:14:06 +0100
commitebfb1dc40d3623684234441c96a2a8850316f516 (patch)
tree0f77c0747e7837dd8ed4bfcf5cffd7a336fda041 /src
parent218051618fc95cbf0def17d309fe135b57dc0146 (diff)
Add option to show available commands
Implement new option -c/--commands to print available commands and its variables.
Diffstat (limited to 'src')
-rw-r--r--src/rebar_core.erl103
1 files changed, 74 insertions, 29 deletions
diff --git a/src/rebar_core.erl b/src/rebar_core.erl
index 7cf0c7a..cd5df50 100644
--- a/src/rebar_core.erl
+++ b/src/rebar_core.erl
@@ -85,32 +85,25 @@ parse_args(Args) ->
%% Parse getopt options
OptSpecList = option_spec_list(),
case getopt:parse(OptSpecList, Args) of
- {ok, {_Options, []}} ->
- %% no command to run specified
- help(),
- halt(1);
{ok, {Options, NonOptArgs}} ->
- case proplists:get_bool(help, Options) of
- true ->
- %% display help
- help(),
- halt(0);
- false ->
- %% Set global variables based on getopt options
- set_global_flag(Options, verbose),
- set_global_flag(Options, force),
- DefJobs = rebar_config:get_jobs(),
- case proplists:get_value(jobs, Options, DefJobs) of
- DefJobs ->
- ok;
- Jobs ->
- rebar_config:set_global(jobs, Jobs)
- end,
-
- %% Filter all the flags (i.e. strings of form key=value) from the
- %% command line arguments. What's left will be the commands to run.
- filter_flags(NonOptArgs, [])
- end;
+ %% Check options and maybe halt execution
+ {ok, continue} = print_help_maybe_halt(Options, NonOptArgs),
+
+ %% Set global variables based on getopt options
+ set_global_flag(Options, verbose),
+ set_global_flag(Options, force),
+ DefJobs = rebar_config:get_jobs(),
+ case proplists:get_value(jobs, Options, DefJobs) of
+ DefJobs ->
+ ok;
+ Jobs ->
+ rebar_config:set_global(jobs, Jobs)
+ end,
+
+ %% Filter all the flags (i.e. strings of form key=value) from the
+ %% command line arguments. What's left will be the commands to run.
+ filter_flags(NonOptArgs, []);
+
{error, {Reason, Data}} ->
?ERROR("Error: ~s ~p~n~n", [Reason, Data]),
help(),
@@ -130,6 +123,31 @@ set_global_flag(Options, Flag) ->
rebar_config:set_global(Flag, Value).
%%
+%% print help
+%%
+print_help_maybe_halt(Options, NonOptArgs) ->
+ case proplists:get_bool(help, Options) of
+ true ->
+ help(),
+ halt(0);
+ false ->
+ case proplists:get_bool(commands, Options) of
+ true ->
+ commands(),
+ halt(0);
+ false ->
+ case NonOptArgs of
+ [] ->
+ io:format("No command to run specified!~n"),
+ help(),
+ halt(1);
+ _ ->
+ {ok, continue}
+ end
+ end
+ end.
+
+%%
%% print help/usage string
%%
help() ->
@@ -140,6 +158,32 @@ help() ->
{"command", "Command to run (e.g. compile)"}]).
%%
+%% print known commands
+%%
+commands() ->
+ io:format(<<
+"analyze Analyze with Dialyzer~n"
+"build_plt Build Dialyzer PLT~n"
+"check_plt Check Dialyzer PLT~n"
+"~n"
+"clean Clean~n"
+"compile Compile sources~n"
+"~n"
+"create template= [var=foo,...] Create skel based on template and vars~n"
+"create-app Create simple app skel~n"
+"create-node Create simple node skel~n"
+"~n"
+"generate [dump_spec=0/1] Build release with reltool~n"
+"install [target=] Install build into target~n"
+"~n"
+"eunit [suite=foo] Run eunit [test/foo_tests.erl] tests~n"
+"~n"
+"int_test [suite=] [case=] Run ct suites in ./int_test~n"
+"perf_test [suite=] [case=] Run ct suites in ./perf_test~n"
+"test [suite=] [case=] Run ct suites in ./test~n"
+>>).
+
+%%
%% options accepted via getopt
%%
option_spec_list() ->
@@ -149,10 +193,11 @@ option_spec_list() ->
[Jobs]),
[
%% {Name, ShortOpt, LongOpt, ArgSpec, HelpMsg}
- {help, $h, "help", undefined, "Show the program options"},
- {verbose, $v, "verbose", undefined, "Be verbose about what gets done"},
- {force, $f, "force", undefined, "Force"},
- {jobs, $j, "jobs", integer, JobsHelp}
+ {help, $h, "help", undefined, "Show the program options"},
+ {commands, $c, "commands", undefined, "Show available commands"},
+ {verbose, $v, "verbose", undefined, "Be verbose about what gets done"},
+ {force, $f, "force", undefined, "Force"},
+ {jobs, $j, "jobs", integer, JobsHelp}
].
%%