summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Sloughter <t@crashfast.com>2018-10-14 10:50:16 -0600
committerGitHub <noreply@github.com>2018-10-14 10:50:16 -0600
commit86519cf743204eab1d922ca8133fbf00c66f9ee8 (patch)
treec2b5574348f2b83f64a86741b59ace1421b8c0f8
parenta80d1988963698717548ba269d7e5f915fca4e27 (diff)
fix resolving versions from vcs (#1915)
app_info was turning any vsn into a binary which the vcs_vsn function interprets as being an actual version and not something like <<"git">>. original_vsn shouldn't be converted as it is then not longer "original".
-rw-r--r--src/rebar_app_info.erl10
-rw-r--r--src/rebar_pkg_resource.erl2
-rw-r--r--src/rebar_state.erl6
-rw-r--r--src/rebar_utils.erl11
4 files changed, 21 insertions, 8 deletions
diff --git a/src/rebar_app_info.erl b/src/rebar_app_info.erl
index b1c6243..9dfe278 100644
--- a/src/rebar_app_info.erl
+++ b/src/rebar_app_info.erl
@@ -124,14 +124,14 @@ new(AppName) ->
{ok, t()}.
new(AppName, Vsn) ->
{ok, #app_info_t{name=rebar_utils:to_binary(AppName),
- original_vsn=rebar_utils:to_binary(Vsn)}}.
+ original_vsn=Vsn}}.
%% @doc build a complete version of the app info with all fields set.
-spec new(atom() | binary() | string(), binary() | string(), file:name()) ->
{ok, t()}.
new(AppName, Vsn, Dir) ->
{ok, #app_info_t{name=rebar_utils:to_binary(AppName),
- original_vsn=rebar_utils:to_binary(Vsn),
+ original_vsn=Vsn,
dir=rebar_utils:to_list(Dir),
out_dir=rebar_utils:to_list(Dir),
ebin_dir=filename:join(rebar_utils:to_list(Dir), "ebin")}}.
@@ -141,7 +141,7 @@ new(AppName, Vsn, Dir) ->
{ok, t()}.
new(AppName, Vsn, Dir, Deps) ->
{ok, #app_info_t{name=rebar_utils:to_binary(AppName),
- original_vsn=rebar_utils:to_binary(Vsn),
+ original_vsn=Vsn,
dir=rebar_utils:to_list(Dir),
out_dir=rebar_utils:to_list(Dir),
ebin_dir=filename:join(rebar_utils:to_list(Dir), "ebin"),
@@ -153,7 +153,7 @@ new(AppName, Vsn, Dir, Deps) ->
new(Parent, AppName, Vsn, Dir, Deps) ->
{ok, #app_info_t{name=rebar_utils:to_binary(AppName),
parent=Parent,
- original_vsn=rebar_utils:to_binary(Vsn),
+ original_vsn=Vsn,
dir=rebar_utils:to_list(Dir),
out_dir=rebar_utils:to_list(Dir),
ebin_dir=filename:join(rebar_utils:to_list(Dir), "ebin"),
@@ -390,7 +390,7 @@ original_vsn(#app_info_t{original_vsn=Vsn}) ->
%% asking for a semver)
-spec original_vsn(t(), binary() | string()) -> t().
original_vsn(AppInfo=#app_info_t{}, Vsn) ->
- AppInfo#app_info_t{original_vsn=rebar_utils:to_binary(Vsn)}.
+ AppInfo#app_info_t{original_vsn=Vsn}.
%% @doc returns the list of applications the app depends on.
-spec applications(t()) -> list().
diff --git a/src/rebar_pkg_resource.erl b/src/rebar_pkg_resource.erl
index 97eabb6..823b7fc 100644
--- a/src/rebar_pkg_resource.erl
+++ b/src/rebar_pkg_resource.erl
@@ -60,7 +60,7 @@ lock(AppInfo, _) ->
Res :: boolean().
needs_update(AppInfo, _) ->
{pkg, _Name, Vsn, _Hash, _} = rebar_app_info:source(AppInfo),
- case rebar_app_info:original_vsn(AppInfo) =:= rebar_utils:to_binary(Vsn) of
+ case rebar_utils:to_binary(rebar_app_info:original_vsn(AppInfo)) =:= rebar_utils:to_binary(Vsn) of
true ->
false;
false ->
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index c8a9400..31d3a08 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -43,7 +43,7 @@
project_builders/1, add_project_builder/3,
- create_resources/2,
+ create_resources/2, set_resources/2,
resources/1, resources/2, add_resource/2,
providers/1, providers/2, add_provider/2,
allow_provider_overrides/1, allow_provider_overrides/2
@@ -368,6 +368,10 @@ namespace(State=#state_t{}, Namespace) ->
resources(#state_t{resources=Resources}) ->
Resources.
+-spec set_resources(t(), [{rebar_resource_v2:type(), module()}]) -> t().
+set_resources(State, Resources) ->
+ State#state_t{resources=Resources}.
+
-spec resources(t(), [{rebar_resource_v2:type(), module()}]) -> t().
resources(State, NewResources) ->
lists:foldl(fun(Resource, StateAcc) ->
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index 419802a..1769b79 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -715,6 +715,15 @@ escript_foldl(Fun, Acc, File) ->
Error
end.
+%% TODO: this is just for rebar3_hex and maybe other plugins
+%% but eventually it should be dropped
+vcs_vsn(OriginalVsn, Dir, Resources) when is_list(Dir) ,
+ is_list(Resources) ->
+ ?WARN("Using deprecated rebar_utils:vcs_vsn/3. Please upgrade your plugins.", []),
+ FakeState = rebar_state:new(),
+ {ok, AppInfo} = rebar_app_info:new(fake, OriginalVsn, Dir),
+ vcs_vsn(AppInfo, OriginalVsn,
+ rebar_state:set_resources(FakeState, Resources));
vcs_vsn(AppInfo, Vcs, State) ->
case vcs_vsn_cmd(AppInfo, Vcs, State) of
{plain, VsnString} ->
@@ -728,7 +737,7 @@ vcs_vsn(AppInfo, Vcs, State) ->
end.
%% Temp work around for repos like relx that use "semver"
-vcs_vsn_cmd(_AppInfo, Vsn, _) when is_binary(Vsn) ->
+vcs_vsn_cmd(_, Vsn, _) when is_binary(Vsn) ->
{plain, Vsn};
vcs_vsn_cmd(AppInfo, VCS, State) when VCS =:= semver ; VCS =:= "semver" ->
vcs_vsn_cmd(AppInfo, git, State);