Merge pull request #8003 from terry-xiaoyu/deny_relup_between_minor_versions
fix: deny relup between minor versions
This commit is contained in:
commit
5e3b0cf2d8
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
-define(TIMEOUT, 300000).
|
-define(TIMEOUT, 300000).
|
||||||
-define(INFO(Fmt,Args), io:format(Fmt++"~n",Args)).
|
-define(INFO(Fmt,Args), io:format(Fmt++"~n",Args)).
|
||||||
|
-define(SEMVER_RE, <<"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[a-zA-Z\\d][-a-zA-Z.\\d]*)?(\\+[a-zA-Z\\d][-a-zA-Z.\\d]*)?$">>).
|
||||||
|
|
||||||
-mode(compile).
|
-mode(compile).
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ unpack(_, Args) ->
|
||||||
install({RelName, NameTypeArg, NodeName, Cookie}, Opts) ->
|
install({RelName, NameTypeArg, NodeName, Cookie}, Opts) ->
|
||||||
TargetNode = start_distribution(NodeName, NameTypeArg, Cookie),
|
TargetNode = start_distribution(NodeName, NameTypeArg, Cookie),
|
||||||
Version = proplists:get_value(version, Opts),
|
Version = proplists:get_value(version, Opts),
|
||||||
|
validate_target_version(Version, TargetNode),
|
||||||
case unpack_release(RelName, TargetNode, Version) of
|
case unpack_release(RelName, TargetNode, Version) of
|
||||||
{ok, Vsn} ->
|
{ok, Vsn} ->
|
||||||
?INFO("Unpacked successfully: ~p.", [Vsn]),
|
?INFO("Unpacked successfully: ~p.", [Vsn]),
|
||||||
|
@ -427,6 +429,29 @@ erts_vsn() ->
|
||||||
[ErtsVsn, _] = string:tokens(binary_to_list(Str), " "),
|
[ErtsVsn, _] = string:tokens(binary_to_list(Str), " "),
|
||||||
ErtsVsn.
|
ErtsVsn.
|
||||||
|
|
||||||
|
validate_target_version(TargetVersion, TargetNode) ->
|
||||||
|
CurrentVersion = current_release_version(TargetNode),
|
||||||
|
case {get_major_minor_vsn(CurrentVersion), get_major_minor_vsn(TargetVersion)} of
|
||||||
|
{{Major, Minor}, {Major, Minor}} -> ok;
|
||||||
|
_ ->
|
||||||
|
?INFO("Cannot upgrade/downgrade to ~s from ~s~n"
|
||||||
|
"We only support relup between patch versions",
|
||||||
|
[TargetVersion, CurrentVersion]),
|
||||||
|
error({relup_not_allowed, unsupported_target_version})
|
||||||
|
end.
|
||||||
|
|
||||||
|
get_major_minor_vsn(Version) ->
|
||||||
|
Parts = parse_semver(Version),
|
||||||
|
[Major | Rem0] = Parts,
|
||||||
|
[Minor | _Rem1] = Rem0,
|
||||||
|
{Major, Minor}.
|
||||||
|
|
||||||
|
parse_semver(Version) ->
|
||||||
|
case re:run(Version, ?SEMVER_RE, [{capture, all_but_first, binary}]) of
|
||||||
|
{match, Parts} -> Parts;
|
||||||
|
nomatch -> error({invalid_semver, Version})
|
||||||
|
end.
|
||||||
|
|
||||||
str(A) when is_atom(A) ->
|
str(A) when is_atom(A) ->
|
||||||
atom_to_list(A);
|
atom_to_list(A);
|
||||||
str(A) when is_binary(A) ->
|
str(A) when is_binary(A) ->
|
||||||
|
|
Loading…
Reference in New Issue