Fix false reporting of (plain) vsn strings

rebar used to mistakenly report plain version strings like
{vsn, "1.0.0"} as follows:
DEBUG: vcs_vsn: Unknown VCS atom in vsn field: "1.0.0"

Properly detect unknown/unsupported version terms and abort
if we encounter one.

While at it, rename a variable in vcs_vsn/3 to be non-misleading.
This commit is contained in:
Tuncer Ayaz 2013-11-24 17:37:59 +01:00
parent 988c9cd574
commit edef0962d2

View file

@ -200,12 +200,12 @@ expand_env_variable(InStr, VarName, RawVarValue) ->
re:replace(InStr, RegEx, [VarValue, "\\2"], ReOpts) re:replace(InStr, RegEx, [VarValue, "\\2"], ReOpts)
end. end.
vcs_vsn(Config, Vcs, Dir) -> vcs_vsn(Config, Vsn, Dir) ->
Key = {Vcs, Dir}, Key = {Vsn, Dir},
Cache = rebar_config:get_xconf(Config, vsn_cache), Cache = rebar_config:get_xconf(Config, vsn_cache),
case dict:find(Key, Cache) of case dict:find(Key, Cache) of
error -> error ->
VsnString = vcs_vsn_1(Vcs, Dir), VsnString = vcs_vsn_1(Vsn, Dir),
Cache1 = dict:store(Key, VsnString, Cache), Cache1 = dict:store(Key, VsnString, Cache),
Config1 = rebar_config:set_xconf(Config, vsn_cache, Cache1), Config1 = rebar_config:set_xconf(Config, vsn_cache, Cache1),
{Config1, VsnString}; {Config1, VsnString};
@ -441,11 +441,12 @@ emulate_escript_foldl(Fun, Acc, File) ->
vcs_vsn_1(Vcs, Dir) -> vcs_vsn_1(Vcs, Dir) ->
case vcs_vsn_cmd(Vcs) of case vcs_vsn_cmd(Vcs) of
{unknown, VsnString} -> {plain, VsnString} ->
?DEBUG("vcs_vsn: Unknown VCS atom in vsn field: ~p\n", [Vcs]),
VsnString; VsnString;
{cmd, CmdString} -> {cmd, CmdString} ->
vcs_vsn_invoke(CmdString, Dir); vcs_vsn_invoke(CmdString, Dir);
unknown ->
?ABORT("vcs_vsn: Unknown vsn format: ~p\n", [Vcs]);
Cmd -> Cmd ->
%% If there is a valid VCS directory in the application directory, %% If there is a valid VCS directory in the application directory,
%% use that version info %% use that version info
@ -478,7 +479,8 @@ vcs_vsn_cmd(bzr) -> "bzr revno";
vcs_vsn_cmd(svn) -> "svnversion"; vcs_vsn_cmd(svn) -> "svnversion";
vcs_vsn_cmd(fossil) -> "fossil info"; vcs_vsn_cmd(fossil) -> "fossil info";
vcs_vsn_cmd({cmd, _Cmd}=Custom) -> Custom; vcs_vsn_cmd({cmd, _Cmd}=Custom) -> Custom;
vcs_vsn_cmd(Version) -> {unknown, Version}. vcs_vsn_cmd(Version) when is_list(Version) -> {plain, Version};
vcs_vsn_cmd(_) -> unknown.
vcs_vsn_invoke(Cmd, Dir) -> vcs_vsn_invoke(Cmd, Dir) ->
{ok, VsnString} = rebar_utils:sh(Cmd, [{cd, Dir}, {use_stdout, false}]), {ok, VsnString} = rebar_utils:sh(Cmd, [{cd, Dir}, {use_stdout, false}]),