From 90fbd6dbb9a1a8d1185fc521ffd2d391e8befcdf Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 25 Jul 2015 11:43:54 -0500 Subject: add support for old format otp versions --- src/rebar_app_discover.erl | 4 ++++ src/rebar_prv_install_deps.erl | 3 +++ src/rebar_utils.erl | 31 ++++++++++++++++--------------- test/rebar_utils_SUITE.erl | 12 +++++++++++- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/rebar_app_discover.erl b/src/rebar_app_discover.erl index f55a4d5..95b3273 100644 --- a/src/rebar_app_discover.erl +++ b/src/rebar_app_discover.erl @@ -51,6 +51,10 @@ merge_deps(AppInfo, State) -> rebar_state:apply_profiles( rebar_state:new(reset_hooks(rebar_state:opts(State, Default)), C, rebar_app_info:dir(AppInfo)), CurrentProfiles), Name), + + rebar_utils:check_min_otp_version(rebar_state:get(AppState, minimum_otp_vsn, undefined)), + rebar_utils:check_blacklisted_otp_versions(rebar_state:get(AppState, blacklisted_otp_vsns, [])), + AppState1 = rebar_state:set(AppState, artifacts, []), AppInfo1 = rebar_app_info:state(AppInfo, AppState1), diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 8bb394a..69956f0 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -386,6 +386,9 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> S4 = rebar_state:set(S3, {plugins, Profile}, Plugins), AppInfo1 = rebar_app_info:state(AppInfo, S4), + rebar_utils:check_min_otp_version(rebar_state:get(S4, minimum_otp_vsn, undefined)), + rebar_utils:check_blacklisted_otp_versions(rebar_state:get(S4, blacklisted_otp_vsns, [])), + %% Dep may have plugins to install. Find and install here. S5 = rebar_plugins:install(S4), AppInfo2 = rebar_app_info:state(AppInfo1, S5), diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index c71808d..5763718 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -306,16 +306,16 @@ check_min_otp_version(undefined) -> check_min_otp_version(MinOtpVersion) -> %% Fully-qualify with ?MODULE so the function can be meck'd in rebar_utils_SUITE OtpRelease = ?MODULE:otp_release(), - {MinMajor, MinMinor} = version_tuple(MinOtpVersion), - {OtpMajor, OtpMinor} = version_tuple(OtpRelease), + ParsedMin = version_tuple(MinOtpVersion), + ParsedVsn = version_tuple(OtpRelease), - case {OtpMajor, OtpMinor} >= {MinMajor, MinMinor} of + case ParsedVsn >= ParsedMin of true -> ?DEBUG("~s satisfies the requirement for minimum OTP version ~s", - [OtpRelease, MinOtpVersion]); + [OtpRelease, MinOtpVersion]); false -> - ?ABORT("OTP release ~s or later is required. Verion in use: ~s", - [MinOtpVersion, OtpRelease]) + ?ABORT("OTP release ~s or later is required. Version in use: ~s", + [MinOtpVersion, OtpRelease]) end. check_blacklisted_otp_versions(undefined) -> @@ -331,10 +331,10 @@ abort_if_blacklisted(BlacklistedRegex, OtpRelease) -> case re:run(OtpRelease, BlacklistedRegex, [{capture, none}]) of match -> ?ABORT("OTP release ~s matches blacklisted version ~s", - [OtpRelease, BlacklistedRegex]); - nomatch -> - ?DEBUG("~s does not match blacklisted OTP version ~s", - [OtpRelease, BlacklistedRegex]) + [OtpRelease, BlacklistedRegex]); + nomatch -> + ?DEBUG("~s does not match blacklisted OTP version ~s", + [OtpRelease, BlacklistedRegex]) end. @@ -342,14 +342,15 @@ abort_if_blacklisted(BlacklistedRegex, OtpRelease) -> %% Internal functions %% ==================================================================== version_tuple(OtpRelease) -> - case re:run(OtpRelease, "R?(\\d+)B?-?(\\d+)?", [{capture, all, list}]) of + case re:run(OtpRelease, "R?(\\d+)B?.?-?(\\d+)?.?-?(\\d+)?", [{capture, all, list}]) of + {match, [_Full, Maj, Min, Patch]} -> + {list_to_integer(Maj), list_to_integer(Min), list_to_integer(Patch)}; {match, [_Full, Maj, Min]} -> - {list_to_integer(Maj), list_to_integer(Min)}; + {list_to_integer(Maj), list_to_integer(Min), 0}; {match, [_Full, Maj]} -> - {list_to_integer(Maj), 0}; + {list_to_integer(Maj), 0, 0}; nomatch -> - ?WARN("", []), - {0,0} + ?ABORT("Minimum OTP release unable to be parsed: ~s", [OtpRelease]) end. otp_release() -> diff --git a/test/rebar_utils_SUITE.erl b/test/rebar_utils_SUITE.erl index 144b840..24e8afe 100644 --- a/test/rebar_utils_SUITE.erl +++ b/test/rebar_utils_SUITE.erl @@ -150,7 +150,17 @@ valid_otp_version(_Config) -> valid_old_format_otp_version(_Config) -> meck:new(rebar_utils, [passthrough]), meck:expect(rebar_utils, otp_release, fun() -> "R15B03-1" end), - rebar_utils:check_min_otp_version("R15"), + rebar_utils:check_min_otp_version("14"), + + meck:expect(rebar_utils, otp_release, fun() -> "R16B03" end), + rebar_utils:check_min_otp_version("16.0"), + + meck:expect(rebar_utils, otp_release, fun() -> "18.0.1" end), + rebar_utils:check_min_otp_version("17.5.4"), + + meck:expect(rebar_utils, otp_release, fun() -> "18.0-rc1" end), + ?assertException(throw, rebar_abort, rebar_utils:check_min_otp_version("19")), + meck:unload(rebar_utils). valid_otp_version_equal(_Config) -> -- cgit v1.1