Przeglądaj źródła

Merge pull request #1721 from tsloughter/no-constraint-match

rebar_package: do not return first package version for constraint with no match
pull/1722/head
Fred Hebert 7 lat temu
committed by GitHub
rodzic
commit
8b4ef7dd83
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 19 dodań i 6 usunięć
  1. +10
    -5
      src/rebar_packages.erl
  2. +9
    -1
      test/rebar_pkg_SUITE.erl

+ 10
- 5
src/rebar_packages.erl Wyświetl plik

@ -170,8 +170,13 @@ find_highest_matching_(Pkg, PkgVsn, Dep, Constraint, Table, State) ->
try find_all(Dep, Table, State) of
{ok, [Vsn]} ->
handle_single_vsn(Pkg, PkgVsn, Dep, Vsn, Constraint);
{ok, [HeadVsn | VsnTail]} ->
{ok, handle_vsns(Constraint, HeadVsn, VsnTail)}
{ok, Vsns} ->
case handle_vsns(Constraint, Vsns) of
none ->
none;
FoundVsn ->
{ok, FoundVsn}
end
catch
error:badarg ->
none
@ -189,16 +194,16 @@ find_all(Dep, Table, State) ->
none
end.
handle_vsns(Constraint, HeadVsn,span> VsnTail) ->
handle_vsns(Constraint, Vsns) ->
lists:foldl(fun(Version, Highest) ->
case ec_semver:pes(Version, Constraint) andalso
ec_semver:gt(Version, Highest) of
(Highest =:= none orelse ec_semver:gt(Version, Highest)) of
true ->
Version;
false ->
Highest
end
end, HeadVsn, VsnTail).
end, none, Vsns).
handle_single_vsn(Pkg, PkgVsn, Dep, Vsn, Constraint) ->
case ec_semver:pes(Vsn, Constraint) of

+ 9
- 1
test/rebar_pkg_SUITE.erl Wyświetl plik

@ -226,7 +226,12 @@ find_highest_matching(_Config) ->
?assertEqual(<<"1.1.1">>, Vsn1),
{ok, Vsn2} = rebar_packages:find_highest_matching(
<<"test">>, <<"1.0.0">>, <<"goodpkg">>, <<"2.0">>, package_index, State),
?assertEqual(<<"2.0.0">>, Vsn2).
?assertEqual(<<"2.0.0">>, Vsn2),
%% regression test. ~> constraints higher than the available packages would result
%% in returning the first package version instead of 'none'.
?assertEqual(none, rebar_packages:find_highest_matching(<<"test">>, <<"1.0.0">>, <<"goodpkg">>,
<<"~> 5.0">>, package_index, State)).
%%%%%%%%%%%%%%%
@ -267,6 +272,9 @@ mock_config(Name, Config) ->
meck:expect(rebar_packages, package_dir, fun(_) -> {ok, CacheDir} end),
rebar_prv_update:hex_to_index(rebar_state:new()),
meck:new(rebar_prv_update, [passthrough]),
meck:expect(rebar_prv_update, do, fun(State) -> {ok, State} end),
%% Cache fetches are mocked -- we assume the server and clients are
%% correctly used.
GoodCache = ?config(good_cache, Config),

Ładowanie…
Anuluj
Zapisz