diff options
| -rw-r--r-- | src/rebar_prv_dialyzer.erl | 6 | ||||
| -rw-r--r-- | src/rebar_templater.erl | 31 | ||||
| -rw-r--r-- | test/rebar_new_SUITE.erl | 28 | ||||
| -rw-r--r-- | test/rebar_resource_SUITE.erl | 3 | ||||
| -rw-r--r-- | test/rebar_xref_SUITE.erl | 19 | 
5 files changed, 64 insertions, 23 deletions
| diff --git a/src/rebar_prv_dialyzer.erl b/src/rebar_prv_dialyzer.erl index 9d2c10a..cc53632 100644 --- a/src/rebar_prv_dialyzer.erl +++ b/src/rebar_prv_dialyzer.erl @@ -160,6 +160,8 @@ get_plt_files([AppName | DepApps], Apps, PltApps, Files) ->              get_plt_files(DepApps, Apps, PltApps, Files);          false ->              {DepApps2, Files2} = app_name_to_info(AppName), +            ?DEBUG("~s dependencies: ~p", [AppName, DepApps2]), +            ?DEBUG("~s files: ~p", [AppName, Files2]),              DepApps3 = DepApps2 ++ DepApps,              Files3 = Files2 ++ Files,              get_plt_files(DepApps3, Apps, [AppName | PltApps], Files3) @@ -208,6 +210,7 @@ search_ebin(AppName) ->  ebin_to_info(EbinDir, AppName) ->      AppFile = filename:join(EbinDir, atom_to_list(AppName) ++ ".app"), +    ?DEBUG("Consulting app file ~p", [AppFile]),      case file:consult(AppFile) of          {ok, [{application, AppName, AppDetails}]} ->              DepApps = proplists:get_value(applications, AppDetails, []), @@ -264,7 +267,6 @@ check_plt(State, Plt, OldList, FilesList) ->      {CheckWarnings, State2} = check_plt(State1, Plt, sets:to_list(Check)),      Add = sets:subtract(Files, Old),      {AddWarnings, State3} = add_plt(State2, Plt, sets:to_list(Add)), -    ?DEBUG("~p", [[RemWarnings, CheckWarnings, AddWarnings]]),      {RemWarnings + CheckWarnings + AddWarnings, State3}.  remove_plt(State, _Plt, []) -> @@ -383,6 +385,7 @@ run_dialyzer(State, Opts) ->              Opts2 = [{warnings, WarningsList},                       {check_plt, false} |                       Opts], +            ?DEBUG("Running dialyzer with options: ~p~n", [Opts2]),              {Unknowns, Warnings} = format_warnings(dialyzer:run(Opts2)),              _ = [?CONSOLE("~s", [Unknown]) || Unknown <- Unknowns],              _ = [?CONSOLE("~s", [Warning]) || Warning <- Warnings], @@ -391,6 +394,7 @@ run_dialyzer(State, Opts) ->              Opts2 = [{warnings, no_warnings()},                       {check_plt, false} |                       Opts], +            ?DEBUG("Running dialyzer with options: ~p~n", [Opts2]),              _ = dialyzer:run(Opts2),              {0, State}      end. diff --git a/src/rebar_templater.erl b/src/rebar_templater.erl index edfe3bd..588f5b2 100644 --- a/src/rebar_templater.erl +++ b/src/rebar_templater.erl @@ -132,14 +132,41 @@ override_vars([{Var, Default, Doc} | Rest], General) ->  %% Default variables, generated dynamically.  default_variables() -> +    {DefaultAuthor, DefaultEmail} = default_author_and_email(),      {{Y,M,D},{H,Min,S}} = calendar:universal_time(),      [{date, lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0w",[Y,M,D]))},       {datetime, 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]))}, -     {author_name, "Anonymous"}, -     {author_email, "anonymous@example.org"}, +     {author_name, DefaultAuthor}, +     {author_email, DefaultEmail},       {copyright_year, integer_to_list(Y)},       {apps_dir, "apps", "Directory where applications will be created if needed"}]. +default_author_and_email() -> +    %% See if we can get a git user and email to use as defaults +    case rebar_utils:sh("git config --global user.name", []) of +        {ok, Name} -> +            case rebar_utils:sh("git config --global user.email", []) of +                {ok, Email} -> +                    {string:strip(Name, both, $\n), string:strip(Email, both, $\n)}; +                {error, _} -> +                    %% Use neither if one doesn't exist +                    {"Anonymous", "anonymous@example.org"} +            end; +        {error, _} -> +            %% Ok, try mecurial +            case rebar_utils:sh("hg showconfig ui.username", []) of +                {ok, NameEmail} -> +                    case re:run(NameEmail, [{capture, [1,2], list}]) of +                        {match, [Name, Email]} -> +                            {Name, Email}; +                        _ -> +                            {"Anonymous", "anonymous@example.org"} +                    end; +                {error, _} -> +                    {"Anonymous", "anonymous@example.org"} +            end +    end. +  %% Load variable definitions from the 'Globals' file in the home template  %% directory  global_variables(State) -> diff --git a/test/rebar_new_SUITE.erl b/test/rebar_new_SUITE.erl index 6b57b74..e382ae4 100644 --- a/test/rebar_new_SUITE.erl +++ b/test/rebar_new_SUITE.erl @@ -6,7 +6,7 @@  -include_lib("common_test/include/ct.hrl").  -include_lib("eunit/include/eunit.hrl"). -all() -> [app]. +all() -> [app, app_with_fallbacks].  init_per_testcase(Case, Config0) -> @@ -32,6 +32,10 @@ mock_empty_escript_templates() ->      meck:expect(rebar_utils, escript_foldl, fun(_,_,_) -> {ok, []} end).  app(Config) -> +    meck:expect(rebar_utils, sh, fun("git config --global user.name", _) -> {ok, "gitname"}; +                                    ("git config --global user.email", _) -> {ok, "git@email.com"} +                                 end), +      Name = ?config(name, Config),      rebar_test_utils:run_and_check(          Config, [], @@ -40,7 +44,7 @@ app(Config) ->      ),      validate_files(          Config, Name, -        [{"LICENSE", ["some_name", "anonymous@example.org"]}, +        [{"LICENSE", ["some_name", "git@email.com"]},           {"README.md", [Name]},           {".gitignore", []},           {"rebar.config", []}, @@ -49,6 +53,26 @@ app(Config) ->           {filename:join(["src", Name++"_app.erl"]), [Name]}          ]). +app_with_fallbacks(Config) -> +    meck:expect(rebar_utils, sh, fun(_, _) -> {error, fallback} end), + +    Name = ?config(name, Config), +    rebar_test_utils:run_and_check( +      Config, [], +      ["new", "test_app", Name], +      {ok, []} +     ), +    validate_files( +      Config, Name, +      [{"LICENSE", ["Anonymous", "anonymous@example.org"]}, +       {"README.md", [Name]}, +       {".gitignore", []}, +       {"rebar.config", []}, +       {filename:join(["src", Name++".app.src"]), [Name]}, +       {filename:join(["src", Name++"_sup.erl"]), [Name]}, +       {filename:join(["src", Name++"_app.erl"]), [Name]} +      ]). +  validate_files(_Config, Name, Checks) ->      [begin          Path = filename:join([Name, File]), diff --git a/test/rebar_resource_SUITE.erl b/test/rebar_resource_SUITE.erl index 088ab67..95263c7 100644 --- a/test/rebar_resource_SUITE.erl +++ b/test/rebar_resource_SUITE.erl @@ -17,6 +17,9 @@ init_per_group(Name, Config) ->      [{type, Name},       {resource, {Name, "https://example.org/user/app", "vsn"}} | Config]. +end_per_group(_, _Config) -> +    ok. +  %% Changing the resource type is seen as an upgrade  init_per_testcase(change_type_upgrade, Config) ->      Type = ?config(type, Config), diff --git a/test/rebar_xref_SUITE.erl b/test/rebar_xref_SUITE.erl index 1b1d6d7..b2438cf 100644 --- a/test/rebar_xref_SUITE.erl +++ b/test/rebar_xref_SUITE.erl @@ -31,7 +31,6 @@ end_per_suite(_Config) ->  init_per_testcase(Case, Config) ->      UpdConfig = rebar_test_utils:init_rebar_state(Config),      AppDir = ?config(apps, UpdConfig), -    {ok, OrigDir} = file:get_cwd(),      file:set_cwd(AppDir),      Name = rebar_test_utils:create_random_name("xrefapp_"),      Vsn = rebar_test_utils:create_random_vsn(), @@ -43,25 +42,9 @@ init_per_testcase(Case, Config) ->                                    undefined_function_calls,undefined_functions,                                    exports_not_used,locals_not_used]}],      [{app_name, Name}, -     {rebar_config, RebarConfig}, -     {orig_dir, OrigDir} | UpdConfig]. +     {rebar_config, RebarConfig} | UpdConfig].  end_per_testcase(_, Config) -> -    ?debugMsg("End test case cleanup"), -    AppDir = ?config(apps, Config), -    OrigDir = ?config(orig_dir, Config), -    %% Code path cleanup because we set the CWD to the `AppDir' prior -    %% to launching rebar and these paths make it into the code path -    %% before the xref module executes so they don't get cleaned up -    %% automatically after the xref run. Only have to do this because -    %% we are about to remove the directory and there may be -    %% subsequent test cases that error out when the code path tries -    %% to include one of these soon-to-be nonexistent directories. -    Name = ?config(app_name, Config), -    EbinDir = filename:join([AppDir, "_build", "default" "lib", Name, "ebin"]), -    true = code:del_path(EbinDir), -    file:set_cwd(OrigDir), -    ec_file:remove(AppDir, [recursive]),      ok.  all() -> | 
