瀏覽代碼

Merge pull request #2459 from ferd/otp24-preparedness

OTP-24 Readiness
pull/2455/merge
Fred Hebert 4 年之前
committed by GitHub
父節點
當前提交
89e10c6f55
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: 4AEE18F83AFDEB23
共有 5 個檔案被更改,包括 111 行新增23 行删除
  1. +6
    -3
      bootstrap
  2. +11
    -11
      rebar.config
  3. +6
    -6
      rebar.lock
  4. +6
    -2
      src/rebar.app.src.script
  5. +82
    -1
      src/rebar_uri.erl

+ 6
- 3
bootstrap 查看文件

@ -156,7 +156,7 @@ set_httpc_options(_, []) ->
ok;
set_httpc_options(Scheme, Proxy) ->
{ok, {_, UserInfo, Host, Port, _, _}} = http_uri:parse(Proxy),
#{userinfo := UserInfo, host := Host, port := Port} = rebar_uri:parse(Proxy),
httpc:set_options([{Scheme, {{Host, Port}, []}}], rebar),
proxy_ipfamily(Host, inet:gethostbyname(Host)),
set_proxy_auth(UserInfo).
@ -213,7 +213,10 @@ compile_erl_file(File, Opts) ->
ok;
{ok, _Mod, Ws} ->
io:format("~s~n", [format_warnings(File, Ws)]),
halt(1);
case lists:member(warnings_as_errors, Opts) of
true -> halt(1);
false -> ok
end;
{error, Es, Ws} ->
io:format("~s ~s~n", [format_errors(File, Es), format_warnings(File, Ws)]),
halt(1)
@ -721,7 +724,7 @@ set_proxy_auth(UserInfo) ->
[Username, Password] = re:split(UserInfo, ":",
[{return, list}, {parts,2}, unicode]),
%% password may contain url encoded characters, need to decode them first
put(proxy_auth, [{proxy_auth, {Username, http_uri:decode(Password)}}]).
put(proxy_auth, [{proxy_auth, {Username, rebar_uri:percent_decode(Password)}}]).
get_proxy_auth() ->
case get(proxy_auth) of

+ 11
- 11
rebar.config 查看文件

@ -1,17 +1,17 @@
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ts=4 sw=4 ft=erlang et
{deps, [{erlware_commons, "1.3.1"},
{ssl_verify_fun, "1.1.6"},
{certifi, "2.5.3"},
{parse_trans, "3.3.0"}, % force otp-21 compat
{providers, "1.8.1"},
{getopt, "1.0.1"},
{bbmustache, "1.10.0"},
{relx, "4.2.0"},
{cf, "0.3.1"},
{cth_readable, "1.4.9"},
{eunit_formatters, "0.5.0"}]}.
{deps, [{erlware_commons, "1.4.0"},
{ssl_verify_fun, "1.1.6"},
{certifi, "2.5.3"},
{parse_trans, "3.3.1"}, % bypass certifi's lock for OTP-24 compat
{providers, "1.8.1"},
{getopt, "1.0.1"},
{bbmustache, "1.10.0"},
{relx, "4.2.0"},
{cf, "0.3.1"},
{cth_readable, "1.4.9"},
{eunit_formatters, "0.5.0"}]}.
{post_hooks, [{"(linux|darwin|solaris|freebsd|netbsd|openbsd)",
escriptize,

+ 6
- 6
rebar.lock 查看文件

@ -3,10 +3,10 @@
{<<"certifi">>,{pkg,<<"certifi">>,<<"2.5.3">>},0},
{<<"cf">>,{pkg,<<"cf">>,<<"0.3.1">>},0},
{<<"cth_readable">>,{pkg,<<"cth_readable">>,<<"1.4.9">>},0},
{<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.3.1">>},0},
{<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.4.0">>},0},
{<<"eunit_formatters">>,{pkg,<<"eunit_formatters">>,<<"0.5.0">>},0},
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0},
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},0},
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.1">>},0},
{<<"providers">>,{pkg,<<"providers">>,<<"1.8.1">>},0},
{<<"relx">>,{pkg,<<"relx">>,<<"4.2.0">>},0},
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.6">>},0}]}.
@ -16,10 +16,10 @@
{<<"certifi">>, <<"70BDD7E7188C804F3A30EE0E7C99655BC35D8AC41C23E12325F36AB449B70651">>},
{<<"cf">>, <<"5CB902239476E141EA70A740340233782D363A31EEA8AD37049561542E6CD641">>},
{<<"cth_readable">>, <<"034FB69795F11061980ECB62B40EF51DC10D4AC115B98FDB2C0CC71D851FBF98">>},
{<<"erlware_commons">>, <<"0CE192AD69BC6FD0880246D852D0ECE17631E234878011D1586E053641ED4C04">>},
{<<"erlware_commons">>, <<"F9EE38412E1413944BE78736DDB9BDB4C0664ABA5133563F4F3B359A8ED0AD52">>},
{<<"eunit_formatters">>, <<"6A9133943D36A465D804C1C5B6E6839030434B8879C5600D7DDB5B3BAD4CCB59">>},
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>},
{<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>},
{<<"parse_trans">>, <<"16328AB840CC09919BD10DAB29E431DA3AF9E9E7E7E6F0089DD5A2D2820011D8">>},
{<<"providers">>, <<"70B4197869514344A8A60E2B2A4EF41CA03DEF43CFB1712ECF076A0F3C62F083">>},
{<<"relx">>, <<"493E34AD009DAAE0C0A6D38F6FFBF45CA8DEF705B01FFF97A00FB4DA08319D34">>},
{<<"ssl_verify_fun">>, <<"CF344F5692C82D2CD7554F5EC8FD961548D4FD09E7D22F5B62482E5AEAEBD4B0">>}]},
@ -28,10 +28,10 @@
{<<"certifi">>, <<"ED516ACB3929B101208A9D700062D520F3953DA3B6B918D866106FFA980E1C10">>},
{<<"cf">>, <<"315E8D447D3A4B02BCDBFA397AD03BBB988A6E0AA6F44D3ADD0F4E3C3BF97672">>},
{<<"cth_readable">>, <<"B4C6ABABDB046C5F2FBB3C22F030B4C5A679083956DCDD29C1DF0CB30B18DA24">>},
{<<"erlware_commons">>, <<"7AADA93F368D0A0430122E39931B7FB4AC9E94DBF043CDC980AD4330FD9CD166">>},
{<<"erlware_commons">>, <<"185ECF5CF43BAB3A013DDB3614CE7BBA7F6C7A827904E64E57DA54FCDFDCE2E6">>},
{<<"eunit_formatters">>, <<"D6C8BA213424944E6E05BBC097C32001CDD0ABE3925D02454F229B20D68763C9">>},
{<<"getopt">>, <<"53E1AB83B9CEB65C9672D3E7A35B8092E9BDC9B3EE80721471A161C10C59959C">>},
{<<"parse_trans">>, <<"17EF63ABDE837AD30680EA7F857DD9E7CED9476CDD7B0394432AF4BFC241B960">>},
{<<"parse_trans">>, <<"07CD9577885F56362D414E8C4C4E6BDF10D43A8767ABB92D24CBE8B24C54888B">>},
{<<"providers">>, <<"E45745ADE9C476A9A469EA0840E418AB19360DC44F01A233304E118A44486BA0">>},
{<<"relx">>, <<"95FA4BF3B1FF2E04033504602BEF72F8F3EB6A90608191CB2D7C0E7E54D0D1FF">>},
{<<"ssl_verify_fun">>, <<"BDB0D2471F453C88FF3908E7686F86F9BE327D065CC1EC16FA4540197EA04680">>}]}

src/rebar.app.src → src/rebar.app.src.script 查看文件

@ -8,7 +8,6 @@
{registered, []},
{applications, [kernel,
stdlib,
hipe,
sasl,
compiler,
crypto,
@ -30,7 +29,12 @@
relx,
cf,
inets,
eunit_formatters]},
eunit_formatters
% OTP 24 drops HiPE
| [hipe || _ <- [application:load(dialyzer)],
{ok, Apps} <- [application:get_key(dialyzer, applications)],
lists:member(hipe, Apps)]
]},
{env, [
%% Default log level
{log_level, warn},

+ 82
- 1
src/rebar_uri.erl 查看文件

@ -3,9 +3,22 @@
-export([
parse/1, parse/2, scheme_defaults/0,
append_path/2
append_path/2, percent_decode/1
]).
-type error() :: {error, atom(), term()}.
-define(DEC2HEX(X),
if ((X) >= 0) andalso ((X) =< 9) -> (X) + $0;
((X) >= 10) andalso ((X) =< 15) -> (X) + $A - 10
end).
-define(HEX2DEC(X),
if ((X) >= $0) andalso ((X) =< $9) -> (X) - $0;
((X) >= $A) andalso ((X) =< $F) -> (X) - $A + 10;
((X) >= $a) andalso ((X) =< $f) -> (X) - $a + 10
end).
-ifdef(OTP_RELEASE).
-spec parse(URIString) -> URIMap when
URIString :: uri_string:uri_string(),
@ -87,6 +100,33 @@ append_path(Url, ExtraPath) ->
end.
-endif.
%% Taken from OTP 23.2
-spec percent_decode(URI) -> Result when
URI :: uri_string:uri_string() | uri_string:uri_map(),
Result :: uri_string:uri_string() |
uri_string:uri_map() |
{error, {invalid, {atom(), {term(), term()}}}}.
percent_decode(URIMap) when is_map(URIMap)->
Fun = fun (K,V) when K =:= userinfo; K =:= host; K =:= path;
K =:= query; K =:= fragment ->
case raw_decode(V) of
{error, Reason, Input} ->
throw({error, {invalid, {K, {Reason, Input}}}});
Else ->
Else
end;
%% Handle port and scheme
(_,V) ->
V
end,
try maps:map(Fun, URIMap)
catch throw:Return ->
Return
end;
percent_decode(URI) when is_list(URI) orelse
is_binary(URI) ->
raw_decode(URI).
%% OTP 21+
-ifdef(OTP_RELEASE).
scheme_defaults() ->
@ -129,3 +169,44 @@ maybe_port(Url, Host, Port, PathQ) ->
false -> Host ++ PathQ % port was implicit
end.
-endif.
-spec raw_decode(list()|binary()) -> list() | binary() | error().
raw_decode(Cs) ->
raw_decode(Cs, <<>>).
raw_decode(L, Acc) when is_list(L) ->
try
B0 = unicode:characters_to_binary(L),
B1 = raw_decode(B0, Acc),
unicode:characters_to_list(B1)
catch
throw:{error, Atom, RestData} ->
{error, Atom, RestData}
end;
raw_decode(<<$%,C0,C1,Cs/binary>>, Acc) ->
case is_hex_digit(C0) andalso is_hex_digit(C1) of
true ->
B = ?HEX2DEC(C0)*16+?HEX2DEC(C1),
raw_decode(Cs, <<Acc/binary, B>>);
false ->
throw({error,invalid_percent_encoding,<<$%,C0,C1>>})
end;
raw_decode(<<C,Cs/binary>>, Acc) ->
raw_decode(Cs, <<Acc/binary, C>>);
raw_decode(<<>>, Acc) ->
check_utf8(Acc).
-spec is_hex_digit(char()) -> boolean().
is_hex_digit(C)
when $0 =< C, C =< $9;$a =< C, C =< $f;$A =< C, C =< $F -> true;
is_hex_digit(_) -> false.
%% Returns Cs if it is utf8 encoded.
check_utf8(Cs) ->
case unicode:characters_to_list(Cs) of
{incomplete,_,_} ->
throw({error,invalid_utf8,Cs});
{error,_,_} ->
throw({error,invalid_utf8,Cs});
_ -> Cs
end.

Loading…
取消
儲存