From 1d9f1737c7a3efe4885d6534df524fba79db4161 Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Thu, 12 Feb 2015 13:07:05 -0500 Subject: Initial WTF provider implementation Tests missing --- src/rebar_prv_wtf.erl | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/rebar_prv_wtf.erl (limited to 'src/rebar_prv_wtf.erl') diff --git a/src/rebar_prv_wtf.erl b/src/rebar_prv_wtf.erl new file mode 100644 index 0000000..f876760 --- /dev/null +++ b/src/rebar_prv_wtf.erl @@ -0,0 +1,100 @@ +%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- +%% ex: ts=4 sw=4 et + +-module(rebar_prv_wtf). + +-behaviour(provider). + +-export([init/1, + do/1, + format_error/1]). + +-include("rebar.hrl"). + +-define(PROVIDER, wtf). +-define(DEPS, []). +-define(ISSUES_URL, "https://github.com/rebar/rebar3/issues"). + +%% =================================================================== +%% 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 wtf \"\""}, + {short_desc, "Provide a crash report to be sent to the rebar3 issues page"}, + {desc, "Provide a crash report to be sent to the rebar3 issues page"}, + {opts, [ + {task, undefined, undefined, string, "Task to print details for."} + ]}])), + {ok, State1}. + +-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. +do(State) -> + %% Show command + Task = rebar_state:command_args(State), + Command = parse_task(Task), + %% Show command version (if a plugin?) + %% ... + %% Show app versions (including rebar3) + {ok, Vsn} = application:get_key(rebar, vsn), + Vsns = application:which_applications(), + %% Show OS and versions + OS = erlang:system_info(system_architecture), + %% Erlang version (ERTS) + ERTS = erlang:system_info(system_version), + %% ERTS root directory + Root = code:root_dir(), + Lib = code:lib_dir(), + %% datetime + UTC = calendar:universal_time(), + %% + ?CONSOLE( + "Rebar3 wtf report~n" + " version ~s~n" + " generated at ~s~n" + "=================~n" + "Please submit this along with your issue at ~s " + "(and feel free to edit out private information, if any)~n" + "-----------------~n" + "Task: ~ts~n" + "Entered as:~n" + " ~ts~n" + "-----------------~n" + "Operating System: ~ts~n" + "ERTS: ~ts" + "Root Directory: ~ts~n" + "Library directory: ~ts~n" + "-----------------~n" + "Loaded Applications:~n" + "~p~n" + "-----------------~n" + "Escript path: ~ts~n" + "Providers:~n" + " ~s", + [Vsn, time_to_string(UTC), + ?ISSUES_URL, Command, Task, + OS, ERTS, Root, Lib, + Vsns, + rebar_state:escript_path(State), + [providers:format(P)++" " + || P <- lists:sort(rebar_state:providers(State))] + ] + ), + {ok, State}. + +-spec format_error(any()) -> iolist(). +format_error(Reason) -> + io_lib:format("~p", [Reason]). + +time_to_string({{Y,M,D},{H,Min,S}}) -> + lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w+00:00", + [Y,M,D,H,Min,S])). + +parse_task(Str) -> + hd(re:split(Str, " ")). + -- cgit v1.1