diff --git a/apps/rebar/src/rebar_packages.erl b/apps/rebar/src/rebar_packages.erl index 7aa9c1940..445d7a06c 100644 --- a/apps/rebar/src/rebar_packages.erl +++ b/apps/rebar/src/rebar_packages.erl @@ -392,7 +392,7 @@ resolve_version_(Dep, DepVsn, Repo, HexRegistry, State) -> end. process_vsn(Vsn) -> - [Vsn1|_] = string:split(Vsn, <<"or">>), + [Vsn1|_] = string:split(Vsn, <<" or ">>), Vsn2 = string:trim(Vsn1), ec_semver:parse(Vsn2). diff --git a/apps/rebar/test/rebar_deps_SUITE.erl b/apps/rebar/test/rebar_deps_SUITE.erl index 2f686fa41..84e4b9e7a 100644 --- a/apps/rebar/test/rebar_deps_SUITE.erl +++ b/apps/rebar/test/rebar_deps_SUITE.erl @@ -500,6 +500,7 @@ valid_version(_Config) -> ?assert(rebar_packages:valid_vsn(<<"~> 0.1.0">>)), ?assert(rebar_packages:valid_vsn(<<"~> 0.1.0">>)), ?assert(rebar_packages:valid_vsn(<<"~> 0.1 or 0.5">>)), + ?assert(rebar_packages:valid_vsn(<<"~> 0.1-or-something">>)), ?assertNot(rebar_packages:valid_vsn(<<"> 0.1.0 and < 0.2.0">>)), ok. diff --git a/apps/rebar/test/rebar_pkg_repos_SUITE.erl b/apps/rebar/test/rebar_pkg_repos_SUITE.erl index 1a29fc63d..646fb20d3 100644 --- a/apps/rebar/test/rebar_pkg_repos_SUITE.erl +++ b/apps/rebar/test/rebar_pkg_repos_SUITE.erl @@ -14,7 +14,9 @@ all() -> groups() -> [{resolve_version, [use_first_repo_match, use_exact_with_hash, fail_repo_update, - ignore_match_in_excluded_repo, optional_prereleases]}]. + ignore_match_in_excluded_repo, optional_prereleases, + or_in_prerelease + ]}]. init_per_group(resolve_version, Config) -> Repo1 = <<"test-repo-1">>, @@ -106,7 +108,7 @@ init_per_testcase(ignore_match_in_excluded_repo, Config) -> fun(_State) -> true end), [{state, State} | Config]; -init_per_testcase(optional_prereleases, Config) -> +init_per_testcase(Case, Config) when Case =:= optional_prereleases; Case =:= or_in_prerelease -> Deps = ?config(deps, Config), Repos = ?config(repos, Config), @@ -459,6 +461,24 @@ optional_prereleases(Config) -> rebar_packages:resolve_version(<<"B">>, <<"~> 1.5.0">>, <<"inner checksum">>, <<"outer checksum">>, ?PACKAGE_TABLE, State1)). +or_in_prerelease(Config) -> + State = ?config(state, Config), + + ?assertMatch({ok,{package,{<<"B">>, {{1,5,0}, {[],[]}}, Hexpm}, + <<"inner checksum">>,<<"outer checksum">>, false, []}, + #{name := Hexpm, + http_adapter := {rebar_httpc_adapter, #{profile := rebar}}}}, + rebar_packages:resolve_version(<<"B">>, <<"~> 1.5.0">>, undefined, undefined, + ?PACKAGE_TABLE, State)), + + State1 = rebar_state:set(State, deps_allow_prerelease, true), + ?assertMatch({ok,{package,{<<"B">>, {{1,5,6}, {[<<"rc">>,0],[]}}, Hexpm}, + <<"inner checksum">>,<<"outer checksum">>, true, []}, + #{name := Hexpm, + http_adapter := {rebar_httpc_adapter, #{profile := rebar}}}}, + rebar_packages:resolve_version(<<"B">>, <<"~> 1.5.5-a-or-b.0">>, <<"inner checksum">>, <<"outer checksum">>, + ?PACKAGE_TABLE, State1)). + %% setup_deps_and_repos(Deps, Repos) ->