mirror of
https://github.com/correl/rebar.git
synced 2025-01-05 11:08:16 +00:00
Move vcs_vsn/2 to rebar_utils
This commit is contained in:
parent
286a2a88a4
commit
1de48e4902
2 changed files with 58 additions and 58 deletions
|
@ -99,7 +99,7 @@ app_vsn(AppFile) ->
|
||||||
case load_app_file(AppFile) of
|
case load_app_file(AppFile) of
|
||||||
{ok, _, AppInfo} ->
|
{ok, _, AppInfo} ->
|
||||||
AppDir = filename:dirname(filename:dirname(AppFile)),
|
AppDir = filename:dirname(filename:dirname(AppFile)),
|
||||||
vcs_vsn(get_value(vsn, AppInfo, AppFile), AppDir);
|
rebar_utils:vcs_vsn(get_value(vsn, AppInfo, AppFile), AppDir);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?ABORT("Failed to extract vsn from ~s: ~p\n",
|
?ABORT("Failed to extract vsn from ~s: ~p\n",
|
||||||
[AppFile, Reason])
|
[AppFile, Reason])
|
||||||
|
@ -156,61 +156,6 @@ get_value(Key, AppInfo, AppFile) ->
|
||||||
Value
|
Value
|
||||||
end.
|
end.
|
||||||
|
|
||||||
vcs_vsn(Vcs, Dir) ->
|
|
||||||
case vcs_vsn_cmd(Vcs) of
|
|
||||||
{unknown, VsnString} ->
|
|
||||||
?DEBUG("vcs_vsn: Unknown VCS atom in vsn field: ~p\n", [Vcs]),
|
|
||||||
VsnString;
|
|
||||||
{cmd, CmdString} ->
|
|
||||||
vcs_vsn_invoke(CmdString, Dir);
|
|
||||||
Cmd ->
|
|
||||||
%% If there is a valid VCS directory in the application directory,
|
|
||||||
%% use that version info
|
|
||||||
Extension = lists:concat([".", Vcs]),
|
|
||||||
case filelib:is_dir(filename:join(Dir, Extension)) of
|
|
||||||
true ->
|
|
||||||
?DEBUG("vcs_vsn: Primary vcs used for ~s\n", [Dir]),
|
|
||||||
vcs_vsn_invoke(Cmd, Dir);
|
|
||||||
false ->
|
|
||||||
%% No VCS directory found for the app. Depending on source
|
|
||||||
%% tree structure, there may be one higher up, but that can
|
|
||||||
%% yield unexpected results when used with deps. So, we
|
|
||||||
%% fallback to searching for a priv/vsn.Vcs file.
|
|
||||||
VsnFile = filename:join([Dir, "priv", "vsn" ++ Extension]),
|
|
||||||
case file:read_file(VsnFile) of
|
|
||||||
{ok, VsnBin} ->
|
|
||||||
?DEBUG("vcs_vsn: Read ~s from priv/vsn.~p\n",
|
|
||||||
[VsnBin, Vcs]),
|
|
||||||
string:strip(binary_to_list(VsnBin), right, $\n);
|
|
||||||
{error, enoent} ->
|
|
||||||
?DEBUG("vcs_vsn: Fallback to vcs for ~s\n", [Dir]),
|
|
||||||
vcs_vsn_invoke(Cmd, Dir)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end.
|
|
||||||
|
|
||||||
vcs_vsn_cmd(git) ->
|
|
||||||
%% Explicitly git-describe a committish to accommodate for projects
|
|
||||||
%% in subdirs which don't have a GIT_DIR. In that case we will
|
|
||||||
%% get a description of the last commit that touched the subdir.
|
|
||||||
case os:type() of
|
|
||||||
{win32,nt} ->
|
|
||||||
"FOR /F \"usebackq tokens=* delims=\" %i in "
|
|
||||||
"(`git log -n 1 \"--pretty=format:%h\" .`) do "
|
|
||||||
"@git describe --always --tags %i";
|
|
||||||
_ ->
|
|
||||||
"git describe --always --tags `git log -n 1 --pretty=format:%h .`"
|
|
||||||
end;
|
|
||||||
vcs_vsn_cmd(hg) -> "hg identify -i";
|
|
||||||
vcs_vsn_cmd(bzr) -> "bzr revno";
|
|
||||||
vcs_vsn_cmd(svn) -> "svnversion";
|
|
||||||
vcs_vsn_cmd({cmd, _Cmd}=Custom) -> Custom;
|
|
||||||
vcs_vsn_cmd(Version) -> {unknown, Version}.
|
|
||||||
|
|
||||||
vcs_vsn_invoke(Cmd, Dir) ->
|
|
||||||
{ok, VsnString} = rebar_utils:sh(Cmd, [{cd, Dir}, {use_stdout, false}]),
|
|
||||||
string:strip(VsnString, right, $\n).
|
|
||||||
|
|
||||||
%% apps= for selecting apps
|
%% apps= for selecting apps
|
||||||
is_selected_app(ThisApp, TargetApps) ->
|
is_selected_app(ThisApp, TargetApps) ->
|
||||||
case lists:member(ThisApp, TargetApps) of
|
case lists:member(ThisApp, TargetApps) of
|
||||||
|
|
|
@ -43,8 +43,8 @@
|
||||||
prop_check/3,
|
prop_check/3,
|
||||||
expand_code_path/0,
|
expand_code_path/0,
|
||||||
deprecated/4, deprecated/5,
|
deprecated/4, deprecated/5,
|
||||||
expand_env_variable/3
|
expand_env_variable/3,
|
||||||
]).
|
vcs_vsn/2]).
|
||||||
|
|
||||||
-include("rebar.hrl").
|
-include("rebar.hrl").
|
||||||
|
|
||||||
|
@ -199,6 +199,39 @@ expand_env_variable(InStr, VarName, RawVarValue) ->
|
||||||
re:replace(InStr, RegEx, [VarValue, "\\2"], ReOpts)
|
re:replace(InStr, RegEx, [VarValue, "\\2"], ReOpts)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
vcs_vsn(Vcs, Dir) ->
|
||||||
|
case vcs_vsn_cmd(Vcs) of
|
||||||
|
{unknown, VsnString} ->
|
||||||
|
?DEBUG("vcs_vsn: Unknown VCS atom in vsn field: ~p\n", [Vcs]),
|
||||||
|
VsnString;
|
||||||
|
{cmd, CmdString} ->
|
||||||
|
vcs_vsn_invoke(CmdString, Dir);
|
||||||
|
Cmd ->
|
||||||
|
%% If there is a valid VCS directory in the application directory,
|
||||||
|
%% use that version info
|
||||||
|
Extension = lists:concat([".", Vcs]),
|
||||||
|
case filelib:is_dir(filename:join(Dir, Extension)) of
|
||||||
|
true ->
|
||||||
|
?DEBUG("vcs_vsn: Primary vcs used for ~s\n", [Dir]),
|
||||||
|
vcs_vsn_invoke(Cmd, Dir);
|
||||||
|
false ->
|
||||||
|
%% No VCS directory found for the app. Depending on source
|
||||||
|
%% tree structure, there may be one higher up, but that can
|
||||||
|
%% yield unexpected results when used with deps. So, we
|
||||||
|
%% fallback to searching for a priv/vsn.Vcs file.
|
||||||
|
VsnFile = filename:join([Dir, "priv", "vsn" ++ Extension]),
|
||||||
|
case file:read_file(VsnFile) of
|
||||||
|
{ok, VsnBin} ->
|
||||||
|
?DEBUG("vcs_vsn: Read ~s from priv/vsn.~p\n",
|
||||||
|
[VsnBin, Vcs]),
|
||||||
|
string:strip(binary_to_list(VsnBin), right, $\n);
|
||||||
|
{error, enoent} ->
|
||||||
|
?DEBUG("vcs_vsn: Fallback to vcs for ~s\n", [Dir]),
|
||||||
|
vcs_vsn_invoke(Cmd, Dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
%% ====================================================================
|
%% ====================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
%% ====================================================================
|
%% ====================================================================
|
||||||
|
@ -299,3 +332,25 @@ deprecated(Key, Old, New, When) ->
|
||||||
"in favor of '~p'.~n"
|
"in favor of '~p'.~n"
|
||||||
"'~p' will be removed ~s.~n~n">>,
|
"'~p' will be removed ~s.~n~n">>,
|
||||||
[Key, Old, New, Old, When]).
|
[Key, Old, New, Old, When]).
|
||||||
|
|
||||||
|
vcs_vsn_cmd(git) ->
|
||||||
|
%% Explicitly git-describe a committish to accommodate for projects
|
||||||
|
%% in subdirs which don't have a GIT_DIR. In that case we will
|
||||||
|
%% get a description of the last commit that touched the subdir.
|
||||||
|
case os:type() of
|
||||||
|
{win32,nt} ->
|
||||||
|
"FOR /F \"usebackq tokens=* delims=\" %i in "
|
||||||
|
"(`git log -n 1 \"--pretty=format:%h\" .`) do "
|
||||||
|
"@git describe --always --tags %i";
|
||||||
|
_ ->
|
||||||
|
"git describe --always --tags `git log -n 1 --pretty=format:%h .`"
|
||||||
|
end;
|
||||||
|
vcs_vsn_cmd(hg) -> "hg identify -i";
|
||||||
|
vcs_vsn_cmd(bzr) -> "bzr revno";
|
||||||
|
vcs_vsn_cmd(svn) -> "svnversion";
|
||||||
|
vcs_vsn_cmd({cmd, _Cmd}=Custom) -> Custom;
|
||||||
|
vcs_vsn_cmd(Version) -> {unknown, Version}.
|
||||||
|
|
||||||
|
vcs_vsn_invoke(Cmd, Dir) ->
|
||||||
|
{ok, VsnString} = rebar_utils:sh(Cmd, [{cd, Dir}, {use_stdout, false}]),
|
||||||
|
string:strip(VsnString, right, $\n).
|
||||||
|
|
Loading…
Reference in a new issue