diff options
author | Tristan Sloughter <t@crashfast.com> | 2015-03-04 21:05:58 -0600 |
---|---|---|
committer | Tristan Sloughter <t@crashfast.com> | 2015-03-05 09:05:39 -0600 |
commit | 1b851267f80b0c0ab839ffb034c9128b796fffc6 (patch) | |
tree | 7392f5c7c18b9cf845f63f77a877d49b35396c6e | |
parent | 28694fa4ef976e5e12685492fffe81b56e82c0f6 (diff) |
use git or hg configs if exist for default user and email in templates
-rw-r--r-- | src/rebar_templater.erl | 31 | ||||
-rw-r--r-- | test/rebar_new_SUITE.erl | 28 |
2 files changed, 55 insertions, 4 deletions
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]), |