New upstream version 3.18.0
parent
36bc1e1299
commit
b15a9b3527
|
@ -6,7 +6,7 @@ FROM erlang:20.3.8.1-alpine as builder
|
|||
# "The LABEL instruction adds metadata to an image."
|
||||
LABEL stage=builder
|
||||
|
||||
# Install git for fetching non-hex depenencies. Also allows rebar3
|
||||
# Install git for fetching non-hex dependencies. Also allows rebar3
|
||||
# to find it's own git version.
|
||||
# Add any other Alpine libraries needed to compile the project here.
|
||||
# See https://wiki.alpinelinux.org/wiki/Local_APK_cache for details
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
bbmustache
|
||||
===========
|
||||
[](https://travis-ci.org/soranoba/bbmustache)
|
||||
[](https://circleci.com/gh/soranoba/bbmustache/tree/master)
|
||||
[](https://hex.pm/packages/bbmustache)
|
||||
|
||||
Binary pattern match Based Mustache template engine for Erlang/OTP.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
{erl_opts, [
|
||||
{platform_define, "^[0-9]+", namespaced_types},
|
||||
{platform_define, "^20", unicode_supported},
|
||||
warnings_as_errors,
|
||||
warn_export_all,
|
||||
warn_untyped_record
|
||||
|
@ -16,6 +17,7 @@
|
|||
|
||||
{edoc_opts, [
|
||||
{doclet, edown_doclet},
|
||||
{app_default, "http://www.erlang.org/doc/man"},
|
||||
{dialyzer_specs, all},
|
||||
{report_missing_type, true},
|
||||
{report_type_mismatch, true},
|
||||
|
@ -38,7 +40,7 @@
|
|||
{deps,
|
||||
[
|
||||
{jsone, "1.4.6"},
|
||||
{mustache_spec, ".*", {git, "git://github.com/soranoba/spec.git", {tag, "v1.1.3-erl"}}}
|
||||
{mustache_spec, ".*", {git, "git://github.com/soranoba/spec.git", {tag, "v1.2.1-erl"}}}
|
||||
]},
|
||||
{plugins, [rebar3_raw_deps]}
|
||||
]},
|
||||
|
@ -52,7 +54,7 @@
|
|||
]},
|
||||
{doc, [{deps,
|
||||
[
|
||||
{edown, ".*", {git, "git://github.com/uwiger/edown.git", {branch, "master"}}}
|
||||
{edown, ".*", {git, "git://github.com/uwiger/edown.git", {tag, "0.8.3"}}}
|
||||
]}
|
||||
]},
|
||||
{bench, [{deps,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application,bbmustache,
|
||||
[{description,"Binary pattern match Based Mustache template engine for Erlang/OTP"},
|
||||
{vsn,"1.10.0"},
|
||||
{vsn,"1.12.2"},
|
||||
{registered,[]},
|
||||
{applications,[kernel,stdlib]},
|
||||
{maintainers,["Hinagiku Soranoba"]},
|
||||
|
|
|
@ -70,23 +70,11 @@
|
|||
%%
|
||||
%% In addition, `.' have a special meaning. <br />
|
||||
%% (1) `parent.child' ... find the child in the parent. <br />
|
||||
%% (2) `.' ... It means this. However, the type of correspond is only `[integer() | float() | binary() | string() | atom()]'. Otherwise, the behavior is undefined.
|
||||
%% (2) `.' ... It means current context.
|
||||
%%
|
||||
|
||||
-type source() :: binary().
|
||||
%% If you use lamda expressions, the original text is necessary.
|
||||
%%
|
||||
%% ```
|
||||
%% e.g.
|
||||
%% template:
|
||||
%% {{#lamda}}a{{b}}c{{/lamda}}
|
||||
%% parse result:
|
||||
%% {'#', <<"lamda">>, [<<"a">>, {'n', <<"b">>}, <<"c">>], <<"a{{b}}c">>}
|
||||
%% '''
|
||||
%%
|
||||
%% NOTE:
|
||||
%% Since the binary reference is used internally, it is not a capacitively large waste.
|
||||
%% However, the greater the number of tags used, it should use the wasted memory.
|
||||
|
||||
-type tag() :: {n, [key()]}
|
||||
| {'&', [key()]}
|
||||
|
@ -94,6 +82,19 @@
|
|||
| {'^', [key()], [tag()]}
|
||||
| {'>', key(), Indent :: source()}
|
||||
| binary(). % plain text
|
||||
%% Tag is the internal data structure of the result of parsing the mustache template.
|
||||
%%
|
||||
%% ```
|
||||
%% e.g.
|
||||
%% template:
|
||||
%% {{#lamda}}a{{b}}c{{/lamda}}
|
||||
%% parse result:
|
||||
%% {'#', [<<"lamda">>], [<<"a">>, {'n', <<"b">>}, <<"c">>], <<"a{{b}}c">>}
|
||||
%% '''
|
||||
%%
|
||||
%% NOTE:
|
||||
%% Since the binary reference is used internally, it is not a capacitively large waste.
|
||||
%% However, the greater the number of tags used, it uses the wasted memory.
|
||||
|
||||
-record(?MODULE,
|
||||
{
|
||||
|
@ -235,7 +236,7 @@ compile(Template, Data) ->
|
|||
%% All keys MUST be same type.
|
||||
-spec compile(template(), data(), [compile_option()]) -> binary().
|
||||
compile(#?MODULE{data = Tags} = T, Data, Options) ->
|
||||
Ret = compile_impl(Tags, Data, [], T#?MODULE{options = Options, data = []}),
|
||||
Ret = compile_impl(Tags, Data, [], T#?MODULE{options = Options, data = [], context_stack = [Data]}),
|
||||
iolist_to_binary(lists:reverse(Ret)).
|
||||
|
||||
%% @doc Default value serializer for templtated values
|
||||
|
@ -246,10 +247,12 @@ default_value_serializer(Float) when is_float(Float) ->
|
|||
%% NOTE: It is the same behaviour as io_lib:format("~p", [Float]), but it is fast than.
|
||||
%% http://www.cs.indiana.edu/~dyb/pubs/FP-Printing-PLDI96.pdf
|
||||
io_lib_format:fwrite_g(Float);
|
||||
default_value_serializer(Atom) when is_atom(Atom) ->
|
||||
list_to_binary(atom_to_list(Atom));
|
||||
default_value_serializer(X) when is_map(X); is_tuple(X) ->
|
||||
error(unsupported_term, [X]);
|
||||
default_value_serializer(X) when X =:= null; X =:= nil ->
|
||||
[];
|
||||
default_value_serializer(X) when is_atom(X) ->
|
||||
unicode:characters_to_binary(atom_to_list(X));
|
||||
default_value_serializer(X) ->
|
||||
X.
|
||||
|
||||
|
@ -272,7 +275,7 @@ compile_impl([], _, Result, _) ->
|
|||
Result;
|
||||
compile_impl([{n, Keys} | T], Data, Result, State) ->
|
||||
ValueSerializer = proplists:get_value(value_serializer, State#?MODULE.options, fun default_value_serializer/1),
|
||||
Value = iolist_to_binary(ValueSerializer(get_data_recursive(Keys, Data, <<>>, State))),
|
||||
Value = unicode:characters_to_binary(ValueSerializer(get_data_recursive(Keys, Data, <<>>, State))),
|
||||
EscapeFun = proplists:get_value(escape_fun, State#?MODULE.options, fun escape/1),
|
||||
compile_impl(T, Data, ?ADD(EscapeFun(Value), Result), State);
|
||||
compile_impl([{'&', Keys} | T], Data, Result, State) ->
|
||||
|
@ -280,24 +283,27 @@ compile_impl([{'&', Keys} | T], Data, Result, State) ->
|
|||
compile_impl(T, Data, ?ADD(ValueSerializer(get_data_recursive(Keys, Data, <<>>, State)), Result), State);
|
||||
compile_impl([{'#', Keys, Tags, Source} | T], Data, Result, State) ->
|
||||
Value = get_data_recursive(Keys, Data, false, State),
|
||||
NestedState = State#?MODULE{context_stack = [Data | State#?MODULE.context_stack]},
|
||||
case is_recursive_data(Value) of
|
||||
true ->
|
||||
NestedState = State#?MODULE{context_stack = [Value | State#?MODULE.context_stack]},
|
||||
case {is_falsy(Value), is_recursive_data(Value)} of
|
||||
{true, _} -> compile_impl(T, Data, Result, State);
|
||||
{_, true} ->
|
||||
compile_impl(T, Data, compile_impl(Tags, Value, Result, NestedState), State);
|
||||
_ when is_list(Value) ->
|
||||
compile_impl(T, Data, lists:foldl(fun(X, Acc) -> compile_impl(Tags, X, Acc, NestedState) end,
|
||||
Result, Value), State);
|
||||
_ when Value =:= false ->
|
||||
compile_impl(T, Data, Result, State);
|
||||
_ when is_function(Value, 2) ->
|
||||
_ when is_list(Value) ->
|
||||
NextResult = lists:foldl(fun(X, Acc) ->
|
||||
%% It doesn't need to add Value to context_stack because List is not context.
|
||||
LoopState = State#?MODULE{context_stack = [X | State#?MODULE.context_stack]},
|
||||
compile_impl(Tags, X, Acc, LoopState)
|
||||
end, Result, Value),
|
||||
compile_impl(T, Data, NextResult, State);
|
||||
_ when is_function(Value, 2) ->
|
||||
Ret = Value(Source, fun(Text) -> render(Text, Data, State#?MODULE.options) end),
|
||||
compile_impl(T, Data, ?ADD(Ret, Result), State);
|
||||
_ ->
|
||||
compile_impl(T, Data, compile_impl(Tags, Data, Result, State), State)
|
||||
_ ->
|
||||
compile_impl(T, Data, compile_impl(Tags, Value, Result, NestedState), State)
|
||||
end;
|
||||
compile_impl([{'^', Keys, Tags} | T], Data, Result, State) ->
|
||||
Value = get_data_recursive(Keys, Data, false, State),
|
||||
case Value =:= [] orelse Value =:= false of
|
||||
case is_falsy(Value) of
|
||||
true -> compile_impl(T, Data, compile_impl(Tags, Data, Result, State), State);
|
||||
false -> compile_impl(T, Data, Result, State)
|
||||
end;
|
||||
|
@ -504,6 +510,11 @@ split_tag(#state{start = StartDelimiter, stop = StopDelimiter}, Bin) ->
|
|||
end
|
||||
end.
|
||||
|
||||
%% @doc Returns true if treated as false. Otherwise it returns false.
|
||||
-spec is_falsy(term()) -> boolean().
|
||||
is_falsy(Value) ->
|
||||
Value =:= [] orelse Value =:= false orelse Value =:= nil orelse Value =:= null orelse Value =:= <<"">>.
|
||||
|
||||
%% @doc if it is standalone line, remove spaces from edge.
|
||||
-spec standalone(#state{}, binary(), [tag()]) -> {#state{}, StashPre :: binary(), Post :: binary(), [tag()]}.
|
||||
standalone(#state{standalone = false} = State, Post, [Pre | Result]) ->
|
||||
|
@ -632,7 +643,7 @@ convert_keytype(KeyBin, #?MODULE{options = Options}) ->
|
|||
|
||||
%% @doc fetch the value of the specified `Keys' from {@link data/0}
|
||||
%%
|
||||
%% - If `Keys' is `[<<".">>]', it returns `Data'.
|
||||
%% - If `Keys' is `[<<".">>]', it returns current context.
|
||||
%% - If raise_on_context_miss enabled, it raise an exception when missing `Keys'. Otherwise, it returns `Default'.
|
||||
-spec get_data_recursive([key()], data(), Default :: term(), template()) -> term().
|
||||
get_data_recursive(Keys, Data, Default, Template) ->
|
||||
|
@ -649,8 +660,8 @@ get_data_recursive(Keys, Data, Default, Template) ->
|
|||
-spec get_data_recursive_impl([key()], data(), template()) -> {ok, term()} | error.
|
||||
get_data_recursive_impl([], Data, _) ->
|
||||
{ok, Data};
|
||||
get_data_recursive_impl([<<".">>], Data, _) ->
|
||||
{ok, Data};
|
||||
get_data_recursive_impl([<<".">>], _, #?MODULE{context_stack = [Context | _]}) ->
|
||||
{ok, Context};
|
||||
get_data_recursive_impl([Key | RestKey] = Keys, Data, #?MODULE{context_stack = Stack} = State) ->
|
||||
case is_recursive_data(Data) andalso find_data(convert_keytype(Key, State), Data) of
|
||||
{ok, ChildData} ->
|
||||
|
|
|
@ -188,48 +188,6 @@ l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
|
|||
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority
|
||||
# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority
|
||||
# Label: "QuoVadis Root CA"
|
||||
# Serial: 985026699
|
||||
# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24
|
||||
# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9
|
||||
# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
|
||||
TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
|
||||
aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
|
||||
aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
|
||||
MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
|
||||
IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
|
||||
dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
|
||||
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
|
||||
li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
|
||||
rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
|
||||
WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
|
||||
F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
|
||||
xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
|
||||
Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
|
||||
dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
|
||||
ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
|
||||
IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
|
||||
c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
|
||||
ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
||||
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
|
||||
KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
|
||||
KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
|
||||
y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
|
||||
dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
|
||||
VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
|
||||
MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
|
||||
fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
|
||||
7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
|
||||
cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
|
||||
mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
|
||||
xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
|
||||
SnQ2+Q==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited
|
||||
# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited
|
||||
# Label: "QuoVadis Root CA 2"
|
||||
|
@ -345,33 +303,6 @@ JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
|
|||
RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=Sonera Class2 CA O=Sonera
|
||||
# Subject: CN=Sonera Class2 CA O=Sonera
|
||||
# Label: "Sonera Class 2 Root CA"
|
||||
# Serial: 29
|
||||
# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb
|
||||
# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27
|
||||
# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
|
||||
MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
|
||||
MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
|
||||
BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
|
||||
hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
|
||||
Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
|
||||
5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
|
||||
3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
|
||||
vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
|
||||
8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
|
||||
DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
|
||||
MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
|
||||
zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
|
||||
3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
|
||||
FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
|
||||
Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
|
||||
ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
|
||||
# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
|
||||
# Label: "XRamp Global CA Root"
|
||||
|
@ -1593,35 +1524,6 @@ LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
|
|||
LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: O=Trustis Limited OU=Trustis FPS Root CA
|
||||
# Subject: O=Trustis Limited OU=Trustis FPS Root CA
|
||||
# Label: "Trustis FPS Root CA"
|
||||
# Serial: 36053640375399034304724988975563710553
|
||||
# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d
|
||||
# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04
|
||||
# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
|
||||
MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
|
||||
ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
|
||||
MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
|
||||
MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
|
||||
AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
|
||||
iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
|
||||
vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
|
||||
0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
|
||||
OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
|
||||
BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
|
||||
FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
|
||||
GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
|
||||
zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
|
||||
1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
|
||||
f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
|
||||
jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
|
||||
ZetX2fNXlrtIzYE=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327
|
||||
# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327
|
||||
# Label: "Buypass Class 2 Root CA"
|
||||
|
@ -4207,3 +4109,254 @@ DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ
|
|||
7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8
|
||||
+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH
|
||||
# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH
|
||||
# Label: "GLOBALTRUST 2020"
|
||||
# Serial: 109160994242082918454945253
|
||||
# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8
|
||||
# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2
|
||||
# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz
|
||||
# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz
|
||||
# Label: "ANF Secure Server Root CA"
|
||||
# Serial: 996390341000653745
|
||||
# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96
|
||||
# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74
|
||||
# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority
|
||||
# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority
|
||||
# Label: "Certum EC-384 CA"
|
||||
# Serial: 160250656287871593594747141429395092468
|
||||
# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1
|
||||
# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed
|
||||
# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw
|
||||
CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw
|
||||
JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT
|
||||
EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0
|
||||
WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
|
||||
LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX
|
||||
BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE
|
||||
KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm
|
||||
Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj
|
||||
QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8
|
||||
EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J
|
||||
UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn
|
||||
nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority
|
||||
# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority
|
||||
# Label: "Certum Trusted Root CA"
|
||||
# Serial: 40870380103424195783807378461123655149
|
||||
# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29
|
||||
# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5
|
||||
# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique
|
||||
# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique
|
||||
# Label: "TunTrust Root CA"
|
||||
# Serial: 108534058042236574382096126452369648152337120275
|
||||
# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4
|
||||
# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb
|
||||
# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL
|
||||
BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg
|
||||
Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv
|
||||
b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG
|
||||
EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u
|
||||
IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ
|
||||
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ
|
||||
n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd
|
||||
2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF
|
||||
VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ
|
||||
GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF
|
||||
li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU
|
||||
r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2
|
||||
eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb
|
||||
MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg
|
||||
jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB
|
||||
7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW
|
||||
5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE
|
||||
ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
|
||||
90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z
|
||||
xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu
|
||||
QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4
|
||||
FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH
|
||||
22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP
|
||||
xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn
|
||||
dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5
|
||||
Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b
|
||||
nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ
|
||||
CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH
|
||||
u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj
|
||||
d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA
|
||||
# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA
|
||||
# Label: "HARICA TLS RSA Root CA 2021"
|
||||
# Serial: 76817823531813593706434026085292783742
|
||||
# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91
|
||||
# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d
|
||||
# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
63ZTGI0RmLo=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA
|
||||
# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA
|
||||
# Label: "HARICA TLS ECC Root CA 2021"
|
||||
# Serial: 137515985548005187474074462014555733966
|
||||
# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0
|
||||
# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48
|
||||
# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw
|
||||
CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh
|
||||
cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v
|
||||
dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG
|
||||
A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
|
||||
aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg
|
||||
Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7
|
||||
KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y
|
||||
STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw
|
||||
AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD
|
||||
AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw
|
||||
SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN
|
||||
nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
|
||||
-----END CERTIFICATE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application,certifi,
|
||||
[{description,"CA bundle adapted from Mozilla by https://certifi.io"},
|
||||
{vsn,"2.6.1"},
|
||||
{vsn,"2.8.0"},
|
||||
{registered,[]},
|
||||
{applications,[kernel,stdlib]},
|
||||
{env,[]},
|
||||
|
|
|
@ -10,9 +10,9 @@ reproducible_module_test() ->
|
|||
|
||||
cacerts_test_() ->
|
||||
Certs = [Cert1, Cert2, Cert3 | _] = certifi:cacerts(),
|
||||
[?_assertEqual(127, length(Certs))
|
||||
,?_assertMatch(<<48,130,2,11,48,130,1,145,160,3,2,1,2,2,18,17,210,187,186,51,_/binary>>, Cert1)
|
||||
,?_assertMatch(<<48,130,5,90,48,130,3,66,160,3,2,1,2,2,18,17,210,187,185,215,_/binary>>, Cert2)
|
||||
,?_assertMatch(<< 48,130,2,110,48,130,1,243,160,3,2,1,2,2,16,98,246,50,108, _ / binary>>, Cert3)
|
||||
[?_assertEqual(128, length(Certs))
|
||||
,?_assertMatch(<<48,130,5,192,48,130,3,168,160,3,2,1,2,2,16,30,191,89,80,184,_/binary>>, Cert1)
|
||||
,?_assertMatch(<<48,130,2,101,48,130,1,235,160,3,2,1,2,2,16,120,143,39,92,_/binary>>, Cert2)
|
||||
,?_assertMatch(<<48,130,5,239,48,130,3,215,160,3,2,1,2,2,8,13,211,227,188,_/binary>>, Cert3)
|
||||
,?_assertMatch(<<48,130,3,117,48,130,2,93,160,3,2,1,2,2,11,4,0,0,0,0,1,21,75,90,195,148,48,13,6,_/binary>>, lists:last(Certs))
|
||||
].
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
providers
|
||||
providers [![GitHub Actions CI][ci-img]][ci]
|
||||
=====
|
||||
|
||||
[ci]: https://github.com/tsloughter/providers
|
||||
[ci-img]: https://github.com/tsloughter/providers/workflows/build/badge.svg
|
||||
|
||||
An Erlang providers library.
|
||||
|
||||
Build
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{erl_opts, [{platform_define, "R14", no_callback_support}
|
||||
,debug_info]}.
|
||||
{deps, [{getopt, "1.0.1"}]}.
|
||||
{deps, [{getopt, "1.0.1"}, {erlware_commons, "1.4.0"}]}.
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
{"1.1.0",
|
||||
[{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}.
|
||||
{"1.2.0",
|
||||
[{<<"cf">>,{pkg,<<"cf">>,<<"0.3.1">>},1},
|
||||
{<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.4.0">>},0},
|
||||
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}.
|
||||
[
|
||||
{pkg_hash,[
|
||||
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]}
|
||||
{<<"cf">>, <<"5CB902239476E141EA70A740340233782D363A31EEA8AD37049561542E6CD641">>},
|
||||
{<<"erlware_commons">>, <<"F9EE38412E1413944BE78736DDB9BDB4C0664ABA5133563F4F3B359A8ED0AD52">>},
|
||||
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]},
|
||||
{pkg_hash_ext,[
|
||||
{<<"cf">>, <<"315E8D447D3A4B02BCDBFA397AD03BBB988A6E0AA6F44D3ADD0F4E3C3BF97672">>},
|
||||
{<<"erlware_commons">>, <<"185ECF5CF43BAB3A013DDB3614CE7BBA7F6C7A827904E64E57DA54FCDFDCE2E6">>},
|
||||
{<<"getopt">>, <<"53E1AB83B9CEB65C9672D3E7A35B8092E9BDC9B3EE80721471A161C10C59959C">>}]}
|
||||
].
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{application,providers,
|
||||
[{description,"Providers provider."},
|
||||
{vsn,"1.8.1"},
|
||||
{vsn,"1.9.0"},
|
||||
{registered,[]},
|
||||
{applications,[kernel,stdlib,getopt]},
|
||||
{licenses,["Apache 2.0"]},
|
||||
|
|
|
@ -155,7 +155,7 @@ help(#provider{opts=Opts
|
|||
|
||||
case Opts of
|
||||
[] ->
|
||||
io:format("Usage: rebar3 ~s~p~n", [StrNS, Name]);
|
||||
io:format("Usage: rebar3 ~ts~ts~n", [StrNS, Name]);
|
||||
_ ->
|
||||
getopt:usage(Opts, "rebar3 " ++ StrNS ++ atom_to_list(Name), "", [])
|
||||
end.
|
||||
|
@ -172,7 +172,7 @@ help(Name, Providers, Namespace) when is_atom(Name) ->
|
|||
help(Provider).
|
||||
|
||||
format_error({provider_not_found, Namespace, ProviderName}) ->
|
||||
io_lib:format("Unable to resolve provider ~s in namespace ~s", [ProviderName, Namespace]).
|
||||
io_lib:format("Unable to resolve provider ~ts in namespace ~ts", [ProviderName, Namespace]).
|
||||
|
||||
%% @doc format an error produced from a provider.
|
||||
-spec format_error(t(), Reason::term()) -> iolist().
|
||||
|
@ -311,7 +311,7 @@ namespace_help(Dict, [NS|Namespaces]) ->
|
|||
if Help =:= [] ->
|
||||
no_public_providers;
|
||||
NS =/= default ->
|
||||
io:format("~n~p <task>:~n", [NS]),
|
||||
io:format("~n~ts <task>:~n", [NS]),
|
||||
display_help(Help);
|
||||
NS =:= default ->
|
||||
display_help(Help)
|
||||
|
@ -323,5 +323,5 @@ display_help(Help) ->
|
|||
lists:foreach(fun({Name, ShortDesc}) ->
|
||||
Length = length(Name),
|
||||
Spacing = lists:duplicate(Longest - Length + 8, " "),
|
||||
io:format("~s~s~s~n", [Name, Spacing, ShortDesc])
|
||||
io:format("~ts~ts~ts~n", [Name, Spacing, ShortDesc])
|
||||
end, Help).
|
||||
|
|
|
@ -208,8 +208,8 @@ find_erts_dir() {
|
|||
__erts_version="$("$__erl" -boot no_dot_erlang -sasl errlog_type error -noshell -eval "$erts_version_code")"
|
||||
ERTS_DIR="${__erl_root}/erts-${__erts_version}"
|
||||
if [ -d "$ERTS_DIR" ]; then
|
||||
ERTS_VSN=${__erts_version}
|
||||
echo "Exact ERTS version (${ERTS_VSN}) match not found, instead using ${__erts_version}. The release may fail to run." 1>&2
|
||||
ERTS_VSN=${__erts_version}
|
||||
else
|
||||
echo "Can not run the release. There is no ERTS bundled with the release or found on the system."
|
||||
exit 1
|
||||
|
@ -328,8 +328,8 @@ erl_rpc() {
|
|||
DYNAMIC_NAME="-r"
|
||||
fi
|
||||
|
||||
if [ "$ERL_DIST_PORT" ]; then
|
||||
result=$("$ERL_RPC" "${DYNAMIC_NAME}" -c "${COOKIE}" -address "${ERL_DIST_PORT}" -timeout "${RELX_RPC_TIMEOUT}" -a "${command}")
|
||||
if [ "$ADDRESS" ]; then
|
||||
result=$("$ERL_RPC" "${DYNAMIC_NAME}" -c "${COOKIE}" -address "${ADDRESS}" -timeout "${RELX_RPC_TIMEOUT}" -a "${command}")
|
||||
else
|
||||
result=$("$ERL_RPC" "$NAME_TYPE" "$NAME" "${DYNAMIC_NAME}" -c "${COOKIE}" -timeout "${RELX_RPC_TIMEOUT}" -a "${command}")
|
||||
fi
|
||||
|
@ -352,7 +352,7 @@ erl_eval() {
|
|||
command=$*
|
||||
|
||||
if [ "$ERL_DIST_PORT" ]; then
|
||||
result=$(echo "${command}" | "$ERL_RPC" "${DYNAMIC_NAME}" -c "${COOKIE}" -address "${ERL_DIST_PORT}" -timeout "${RELX_RPC_TIMEOUT}" -e)
|
||||
result=$(echo "${command}" | "$ERL_RPC" "${DYNAMIC_NAME}" -c "${COOKIE}" -address "${ADDRESS}" -timeout "${RELX_RPC_TIMEOUT}" -e)
|
||||
else
|
||||
result=$(echo "${command}" | "$ERL_RPC" "$NAME_TYPE" "$NAME" "${DYNAMIC_NAME}" -c "${COOKIE}" -timeout "${RELX_RPC_TIMEOUT}" -e)
|
||||
fi
|
||||
|
@ -410,6 +410,22 @@ relx_escript() {
|
|||
"$ERTS_DIR/bin/escript" "$ROOTDIR/$scriptpath" "$@"
|
||||
}
|
||||
|
||||
# Convert {127,0,0,1} to 127.0.0.1 (inet:ntoa/1)
|
||||
addr_tuple_to_str() {
|
||||
addr="$1"
|
||||
saved_IFS="$IFS"
|
||||
IFS="{,}'\" "
|
||||
# shellcheck disable=SC2086
|
||||
eval set -- $addr
|
||||
IFS="$saved_IFS"
|
||||
|
||||
case $# in
|
||||
4) printf '%u.%u.%u.%u' "$@";;
|
||||
8) printf '%.4x:%.4x:%.4x:%.4x:%.4x:%.4x:%.4x:%.4x' "$@";;
|
||||
*) echo "Cannot parse IP address tuple: '$addr'" 1>&2;;
|
||||
esac
|
||||
}
|
||||
|
||||
make_out_file_path() {
|
||||
# Use output directory provided in the RELX_OUT_FILE_PATH environment variable
|
||||
# (default to the current location of vm.args and sys.config)
|
||||
|
@ -435,6 +451,7 @@ replace_os_vars() {
|
|||
slen=split(var,arr,":-")
|
||||
v=arr[1]
|
||||
e=ENVIRON[v]
|
||||
gsub("&","\\\\\\&",e)
|
||||
if(slen > 1 && e=="") {
|
||||
i=index(var, ":-"arr[2])
|
||||
def=substr(var,i+2)
|
||||
|
@ -596,7 +613,7 @@ RELX_CONFIG_PATH=$(check_replace_os_vars sys.config "$RELX_CONFIG_PATH")
|
|||
# - nonexisting -args_files
|
||||
# - circular dependencies of -args_files
|
||||
# - relative paths in -args_file parameters
|
||||
# - multiple/mixed occurences of -name and -sname parameters
|
||||
# - multiple/mixed occurrences of -name and -sname parameters
|
||||
# - missing -name or -sname parameters
|
||||
# If all checks pass, extract the target node name
|
||||
set +e
|
||||
|
@ -673,8 +690,17 @@ EPMD_MODULE="$(grep '^-epmd_module' "$VMARGS_PATH" || true)"
|
|||
if [ "$EPMD_MODULE" ]; then
|
||||
DIST_ARGS="${DIST_ARGS} ${EPMD_MODULE}"
|
||||
fi
|
||||
INET_DIST_USE_INTERFACE="$(grep '^-kernel *inet_dist_use_interface' "$VMARGS_PATH" || true)"
|
||||
if [ "$INET_DIST_USE_INTERFACE" ]; then
|
||||
DIST_ARGS="${DIST_ARGS} ${INET_DIST_USE_INTERFACE}"
|
||||
fi
|
||||
|
||||
if [ "$ERL_DIST_PORT" ]; then
|
||||
if [ "$INET_DIST_USE_INTERFACE" ]; then
|
||||
ADDRESS="$(addr_tuple_to_str "${INET_DIST_USE_INTERFACE#*inet_dist_use_interface }"):$ERL_DIST_PORT"
|
||||
else
|
||||
ADDRESS="$ERL_DIST_PORT"
|
||||
fi
|
||||
if [ "11.1" = "$(printf "%s\n11.1" "${ERTS_VSN}" | sort -V | head -n1)" ] ; then
|
||||
# unless set by the user, set start_epmd to false when ERL_DIST_PORT is used
|
||||
if [ ! "$START_EPMD" ]; then
|
||||
|
@ -683,6 +709,13 @@ if [ "$ERL_DIST_PORT" ]; then
|
|||
EXTRA_DIST_ARGS="-erl_epmd_port ${ERL_DIST_PORT}"
|
||||
fi
|
||||
else
|
||||
ERL_DIST_PORT_WARNING="ERL_DIST_PORT is set and used to set the port, but doing so on ERTS version ${ERTS_VSN} means remsh/rpc will not work for this release"
|
||||
if ! command -v logger > /dev/null 2>&1
|
||||
then
|
||||
echo "WARNING: ${ERL_DIST_PORT_WARNING}"
|
||||
else
|
||||
logger -p warning -t "${REL_NAME}[$$]" "${ERL_DIST_PORT_WARNING}"
|
||||
fi
|
||||
EXTRA_DIST_ARGS="-kernel inet_dist_listen_min ${ERL_DIST_PORT} -kernel inet_dist_listen_max ${ERL_DIST_PORT}"
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
%% used in tests
|
||||
{rlx_app_info, new, 5},
|
||||
{rlx_app_info, new, 6},
|
||||
{rlx_app_info, new, 7},
|
||||
{rlx_file_utils, type, 1},
|
||||
{rlx_file_utils, write, 2},
|
||||
{rlx_release, applications, 1},
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{application,relx,
|
||||
[{description,"Release assembler for Erlang/OTP Releases"},
|
||||
{vsn,"4.5.0"},
|
||||
{vsn,"4.6.0"},
|
||||
{modules,[]},
|
||||
{registered,[]},
|
||||
{applications,[kernel,stdlib,bbmustache]},
|
||||
{licenses,["Apache-2"]},
|
||||
{licenses,["Apache-2.0"]},
|
||||
{links,[{"Github","https://github.com/erlware/relx"}]}]}.
|
||||
|
|
|
@ -184,7 +184,7 @@ pick_release(State) ->
|
|||
pick_release_version(undefined, State) ->
|
||||
pick_release(State);
|
||||
pick_release_version(RelName, State) ->
|
||||
%% Here we will just get the lastest version for name RelName and run that.
|
||||
%% Here we will just get the latest version for name RelName and run that.
|
||||
AllReleases = maps:to_list(rlx_state:configured_releases(State)),
|
||||
SpecificReleases = [Rel || Rel={{PossibleRelName, _}, _} <- AllReleases, PossibleRelName =:= RelName],
|
||||
case lists:sort(fun release_sort/2, SpecificReleases) of
|
||||
|
@ -202,7 +202,7 @@ release_sort({{RelName, RelVsnA}, _},
|
|||
rlx_util:parsed_vsn_lte(rlx_util:parse_vsn(RelVsnB), rlx_util:parse_vsn(RelVsnA));
|
||||
release_sort({{RelA, _}, _}, {{RelB, _}, _}) ->
|
||||
%% The release names are different. When the releases are named differently
|
||||
%% we can not just take the lastest version. You *must* provide a default
|
||||
%% we can not just take the latest version. You *must* provide a default
|
||||
%% release name at least. So we throw an error here that the top can catch
|
||||
%% and return
|
||||
error(?RLX_ERROR({multiple_release_names, RelA, RelB})).
|
||||
|
|
|
@ -38,11 +38,13 @@
|
|||
|
||||
-export([new/5,
|
||||
new/6,
|
||||
new/7,
|
||||
name/1,
|
||||
vsn/1,
|
||||
dir/1,
|
||||
applications/1,
|
||||
included_applications/1,
|
||||
optional_applications/1,
|
||||
link/1,
|
||||
link/2,
|
||||
format_error/1,
|
||||
|
@ -57,6 +59,7 @@
|
|||
|
||||
applications := [atom()],
|
||||
included_applications := [atom()],
|
||||
optional_applications := [atom()],
|
||||
|
||||
dir := file:name() | undefined,
|
||||
link := boolean() | undefined,
|
||||
|
@ -73,15 +76,23 @@
|
|||
|
||||
-spec new(atom(), string(), file:name(), [atom()], [atom()]) -> t().
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications) ->
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, dep).
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, [], dep).
|
||||
|
||||
-spec new(atom(), string(), file:name(), [atom()], [atom()], app_type()) -> t().
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, AppType) ->
|
||||
-spec new(atom(), string(), file:name(), [atom()], [atom()], [atom()] | atom()) -> t().
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, OptionalApplications)
|
||||
when is_list(OptionalApplications) ->
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, OptionalApplications, dep);
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, AppType) when is_atom(AppType) ->
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, [], AppType).
|
||||
|
||||
-spec new(atom(), string(), file:name(), [atom()], [atom()], [atom()], app_type()) -> t().
|
||||
new(Name, Vsn, Dir, Applications, IncludedApplications, OptionalApplications, AppType) ->
|
||||
#{name => Name,
|
||||
vsn => Vsn,
|
||||
|
||||
applications => Applications,
|
||||
included_applications => IncludedApplications,
|
||||
optional_applications => OptionalApplications,
|
||||
|
||||
dir => Dir,
|
||||
link => false,
|
||||
|
@ -108,6 +119,10 @@ applications(#{applications := Deps}) ->
|
|||
included_applications(#{included_applications := Deps}) ->
|
||||
Deps.
|
||||
|
||||
-spec optional_applications(t()) -> [atom()].
|
||||
optional_applications(#{included_applications := Deps}) ->
|
||||
Deps.
|
||||
|
||||
-spec link(t()) -> boolean().
|
||||
link(#{link := Link}) ->
|
||||
Link.
|
||||
|
|
|
@ -129,13 +129,20 @@ rewrite_app_file(State, App, TargetDir) ->
|
|||
Name = rlx_app_info:name(App),
|
||||
Applications = rlx_app_info:applications(App),
|
||||
IncludedApplications = rlx_app_info:included_applications(App),
|
||||
OptionalApplications = rlx_app_info:optional_applications(App),
|
||||
|
||||
%% TODO: should really read this in when creating rlx_app:t() and keep it
|
||||
AppFile = filename:join([TargetDir, "ebin", [Name, ".app"]]),
|
||||
{ok, [{application, AppName, AppData0}]} = file:consult(AppFile),
|
||||
?log_debug("Rewriting .app file: ~s", [AppFile]),
|
||||
[{application, AppName, AppData0}] = case file:consult(AppFile) of
|
||||
{ok, AppTerms} ->
|
||||
AppTerms;
|
||||
{error, ConsultError} ->
|
||||
erlang:error(?RLX_ERROR({consult_app_file, AppFile, ConsultError}))
|
||||
end,
|
||||
|
||||
%% maybe replace excluded apps
|
||||
AppData1 = maybe_exclude_apps(Applications, IncludedApplications,
|
||||
AppData1 = maybe_exclude_apps(Applications, IncludedApplications, OptionalApplications,
|
||||
AppData0, rlx_state:exclude_apps(State)),
|
||||
|
||||
AppData2 = maybe_exclude_modules(AppData1, proplists:get_value(Name,
|
||||
|
@ -150,17 +157,23 @@ rewrite_app_file(State, App, TargetDir) ->
|
|||
erlang:error(?RLX_ERROR({rewrite_app_file, AppFile, Error}))
|
||||
end.
|
||||
|
||||
maybe_exclude_apps(_Applications, _IncludedApplications, AppData, []) ->
|
||||
maybe_exclude_apps(_Applications, _IncludedApplications, _OptionalApplications, AppData, []) ->
|
||||
AppData;
|
||||
maybe_exclude_apps(Applications, IncludedApplications, AppData, ExcludeApps) ->
|
||||
maybe_exclude_apps(Applications, IncludedApplications, OptionalApplications, AppData, ExcludeApps) ->
|
||||
AppData1 = lists:keyreplace(applications,
|
||||
1,
|
||||
AppData,
|
||||
{applications, Applications -- ExcludeApps}),
|
||||
lists:keyreplace(included_applications,
|
||||
AppData2 = lists:keyreplace(included_applications,
|
||||
1,
|
||||
AppData1,
|
||||
{included_applications, IncludedApplications -- ExcludeApps}),
|
||||
|
||||
%% not absolutely necessary since they are already seen as optional, but may as well
|
||||
lists:keyreplace(optional_applications,
|
||||
1,
|
||||
AppData1,
|
||||
{included_applications, IncludedApplications -- ExcludeApps}).
|
||||
AppData2,
|
||||
{optional_applications, OptionalApplications -- ExcludeApps}).
|
||||
|
||||
maybe_exclude_modules(AppData, []) ->
|
||||
AppData;
|
||||
|
@ -829,7 +842,7 @@ copy_to_start(RelDir, Name) ->
|
|||
ok ->
|
||||
ok;
|
||||
{error, Reason} ->
|
||||
%% it isn't absolutely necesary for start.boot to exist so just warn
|
||||
%% it isn't absolutely necessary for start.boot to exist so just warn
|
||||
?log_warn("Unable to copy boot file ~s to start.boot: ~p", [BootFile, Reason]),
|
||||
ok
|
||||
end.
|
||||
|
@ -1086,5 +1099,11 @@ format_error({strip_release, Reason}) ->
|
|||
format_error({rewrite_app_file, AppFile, Error}) ->
|
||||
io_lib:format("Unable to rewrite .app file ~s due to ~p",
|
||||
[AppFile, Error]);
|
||||
format_error({consult_app_file, AppFile, enoent}) ->
|
||||
io_lib:format("Unable to consult .app file ~ts (file not found).",
|
||||
[AppFile]);
|
||||
format_error({consult_app_file, AppFile, Error}) ->
|
||||
io_lib:format("Unable to consult .app file ~ts due to ~ts",
|
||||
[AppFile, file:format_error(Error)]);
|
||||
format_error({create_RELEASES, Reason}) ->
|
||||
io_lib:format("Unable to create RELEASES file needed by release_handler: ~p", [Reason]).
|
||||
|
|
|
@ -214,7 +214,7 @@ generate_state_vars(Release, State) ->
|
|||
{vm_args, rlx_state:vm_args(State)},
|
||||
{sys_config, rlx_state:sys_config(State)},
|
||||
{root_dir, rlx_state:root_dir(State)}
|
||||
%% include a var for each application. makes it easier to copy a file from an applcation
|
||||
%% include a var for each application. makes it easier to copy a file from an application
|
||||
| [{rlx_app_info:name(AppInfo), rlx_app_info:dir(AppInfo)}
|
||||
|| AppInfo <- rlx_release:applications(Release)]].
|
||||
|
||||
|
|
|
@ -44,34 +44,63 @@ solve_release(Release, State0) ->
|
|||
{false, [SystemLibs | LibDirs]}
|
||||
end,
|
||||
|
||||
Pkgs = subset(Goals, AllApps, LibDirs1, CheckCodeLibDirs),
|
||||
Pkgs1 = remove_exclude_apps(Pkgs, State1),
|
||||
set_resolved(Release, Pkgs1, State1)
|
||||
ExcludeApps = rlx_state:exclude_apps(State1),
|
||||
Pkgs = subset(Goals, AllApps, LibDirs1, CheckCodeLibDirs, ExcludeApps),
|
||||
set_resolved(Release, Pkgs, State1)
|
||||
end.
|
||||
|
||||
%% find the app_info records for each application and its deps needed for the release
|
||||
subset(Apps, World, LibDirs, CheckCodeLibDirs) ->
|
||||
subset(Apps, World, sets:new(), LibDirs, CheckCodeLibDirs, []).
|
||||
subset(Goals, World, LibDirs, CheckCodeLibDirs, ExcludeApps) ->
|
||||
{Apps, _} = fold_apps(Goals, World, sets:new(), LibDirs, CheckCodeLibDirs, [], ExcludeApps),
|
||||
Apps.
|
||||
|
||||
subset([], _World, _Seen, _LibDirs, _CheckCodeLibDirs, Acc) ->
|
||||
Acc;
|
||||
subset([Goal | Rest], World, Seen, LibDirs, CheckCodeLibDirs, Acc) ->
|
||||
subset(Goal, World, Seen, LibDirs, CheckCodeLibDirs, OptionalApplications, ExcludeApps) ->
|
||||
{Name, Vsn} = name_version(Goal),
|
||||
case sets:is_element(Name, Seen) of
|
||||
true ->
|
||||
subset(Rest, World, Seen, LibDirs, CheckCodeLibDirs, Acc);
|
||||
{[], Seen};
|
||||
_ ->
|
||||
AppInfo=#{applications := Applications,
|
||||
included_applications := IncludedApplications} =
|
||||
find_app(Name, Vsn, World, LibDirs, CheckCodeLibDirs),
|
||||
subset(Rest ++ Applications ++ IncludedApplications,
|
||||
World,
|
||||
sets:add_element(Name, Seen),
|
||||
LibDirs,
|
||||
CheckCodeLibDirs,
|
||||
Acc ++ [AppInfo])
|
||||
case find_app(Name, Vsn, World, LibDirs, CheckCodeLibDirs) of
|
||||
not_found ->
|
||||
case lists:member(Name, OptionalApplications) of
|
||||
true ->
|
||||
%% don't add to Seen since optional applications are only
|
||||
%% per-application and not global, so another app could
|
||||
%% depend on this dependency
|
||||
{[], Seen};
|
||||
false ->
|
||||
erlang:error(?RLX_ERROR({app_not_found, Name, Vsn}))
|
||||
end;
|
||||
AppInfo=#{applications := Applications,
|
||||
included_applications := IncludedApplications,
|
||||
optional_applications := OptionalApplications0} ->
|
||||
{Apps, Seen2} = fold_apps(Applications ++ IncludedApplications ++ OptionalApplications0,
|
||||
World,
|
||||
sets:add_element(Name, Seen),
|
||||
LibDirs,
|
||||
CheckCodeLibDirs,
|
||||
OptionalApplications0,
|
||||
ExcludeApps),
|
||||
|
||||
%% don't add excluded apps
|
||||
%% TODO: should an excluded app's deps also be excluded?
|
||||
case lists:member(Name, ExcludeApps) of
|
||||
true ->
|
||||
{Apps, Seen2};
|
||||
false ->
|
||||
%% place the deps of the App before it
|
||||
{Apps ++ [AppInfo], Seen2}
|
||||
end
|
||||
end
|
||||
end.
|
||||
|
||||
fold_apps(Apps, World, Seen, LibDirs, CheckCodeLibDirs, OptionalApplications, ExcludeApps) ->
|
||||
lists:foldl(fun(App, {AppAcc, SeenAcc}) ->
|
||||
{NewApps, SeenAcc1} = subset(App, World, SeenAcc, LibDirs,
|
||||
CheckCodeLibDirs, OptionalApplications, ExcludeApps),
|
||||
%% put new apps after the existing list to keep the user defined order
|
||||
{AppAcc ++ NewApps, SeenAcc1}
|
||||
end, {[], Seen}, Apps).
|
||||
|
||||
set_resolved(Release0, Pkgs, State) ->
|
||||
case rlx_release:realize(Release0, Pkgs) of
|
||||
|
@ -100,19 +129,6 @@ name_version(Name) when is_atom(Name) ->
|
|||
name_version({Name, #{vsn := Vsn}}) ->
|
||||
{Name, Vsn}.
|
||||
|
||||
remove_exclude_apps(AllApps, State) ->
|
||||
ExcludeApps = rlx_state:exclude_apps(State),
|
||||
lists:foldl(fun(AppName, Acc) ->
|
||||
find_and_remove(AppName, Acc)
|
||||
end, AllApps, ExcludeApps).
|
||||
|
||||
find_and_remove(_, []) ->
|
||||
[];
|
||||
find_and_remove(ExcludeName, [#{name := Name} | Rest]) when ExcludeName =:= Name ->
|
||||
Rest;
|
||||
find_and_remove(ExcludeName, [H | Rest]) ->
|
||||
[H | find_and_remove(ExcludeName, Rest)].
|
||||
|
||||
%% Applications are first searched for in the `Apps' variable which is a map
|
||||
%% of application name to `rlx_app_info' map. This variable is passed to `relx'
|
||||
%% function calls to build the release or tarball
|
||||
|
@ -144,7 +160,7 @@ search_for_app(Name, Vsn, LibDirs, CheckCodeLibDirs) ->
|
|||
%% app not found in any lib dir we are configured to search
|
||||
%% and user set a custom `system_libs' directory so we do
|
||||
%% not look in `code:lib_dir'
|
||||
erlang:error(?RLX_ERROR({app_not_found, Name, Vsn}));
|
||||
not_found;
|
||||
AppInfo ->
|
||||
case check_app(Name, Vsn, AppInfo) of
|
||||
true ->
|
||||
|
@ -175,13 +191,13 @@ find_app_in_dir(Name, Vsn, [Dir | Rest]) ->
|
|||
find_app_in_code_path(Name, Vsn) ->
|
||||
case code:lib_dir(Name) of
|
||||
{error, bad_name} ->
|
||||
erlang:error(?RLX_ERROR({app_not_found, Name, Vsn}));
|
||||
not_found;
|
||||
Dir ->
|
||||
case to_app(Name, Vsn, filename:join([Dir, "ebin", [Name, ".app"]])) of
|
||||
{true, AppInfo} ->
|
||||
AppInfo;
|
||||
false ->
|
||||
erlang:error(?RLX_ERROR({app_not_found, Name, Vsn}))
|
||||
not_found
|
||||
end
|
||||
end.
|
||||
|
||||
|
@ -200,6 +216,7 @@ to_app(Name, Vsn, AppFilePath) ->
|
|||
end,
|
||||
Applications = proplists:get_value(applications, AppData, []),
|
||||
IncludedApplications = proplists:get_value(included_applications, AppData, []),
|
||||
OptionalApplications = proplists:get_value(optional_applications, AppData, []),
|
||||
|
||||
case lists:keyfind(vsn, 1, AppData) of
|
||||
{_, Vsn1} when Vsn =:= undefined ;
|
||||
|
@ -209,6 +226,7 @@ to_app(Name, Vsn, AppFilePath) ->
|
|||
|
||||
applications => Applications,
|
||||
included_applications => IncludedApplications,
|
||||
optional_applications => OptionalApplications,
|
||||
|
||||
dir => filename:dirname(filename:dirname(AppFilePath)),
|
||||
link => false}};
|
||||
|
|
|
@ -66,7 +66,7 @@ parse_vsn(Vsn) ->
|
|||
"(\\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$", [{capture, [1,2,4,6,8], list}]) of
|
||||
%% OTP application's leave out patch version when it is .0
|
||||
%% this regex currently drops prerelease and build if the patch version is left out
|
||||
%% so 3.11-0+meta would reutrn {{3,11,0},{[], []}} intsead of {{3,1,0},{"0","meta"}}
|
||||
%% so 3.11-0+meta would return {{3,11,0},{[], []}} intsead of {{3,1,0},{"0","meta"}}
|
||||
{match, [Major, Minor, [], PreRelease, Build]} ->
|
||||
{{list_to_integer(Major), list_to_integer(Minor), 0}, {PreRelease, Build}};
|
||||
{match, [Major, Minor, Patch, PreRelease, Build]} ->
|
||||
|
|
|
@ -44,7 +44,7 @@ main(_) ->
|
|||
bootstrap_rebar3(),
|
||||
|
||||
%% Build rebar.app from rebar.app.src
|
||||
{ok, App} = rebar_app_info:new(rebar, "3.17.0", filename:absname("_build/default/lib/rebar/")),
|
||||
{ok, App} = rebar_app_info:new(rebar, "3.18.0", filename:absname("_build/default/lib/rebar/")),
|
||||
rebar_otp_app:compile(rebar_state:new(), App),
|
||||
|
||||
%% Because we are compiling files that are loaded already we want to silence
|
||||
|
|
BIN
hex/packages.idx
BIN
hex/packages.idx
Binary file not shown.
|
@ -61,7 +61,7 @@ end
|
|||
##
|
||||
## plugins <task>:
|
||||
## list List local and global plugins for this project
|
||||
## upgrade Uprade plugins
|
||||
## upgrade Upgrade plugins
|
||||
##
|
||||
## Run 'rebar3 help <TASK>' for details.
|
||||
# general options
|
||||
|
@ -190,7 +190,7 @@ complete -f -c 'rebar3' -n '__fish_rebar3_using_command tar' -l system_libs
|
|||
complete -f -c 'rebar3' -n '__fish_rebar3_using_command tar' -l version -d "Print relx version"
|
||||
complete -f -c 'rebar3' -n '__fish_rebar3_using_command tar' -s r -l root -d "The project root directory"
|
||||
|
||||
complete -f -c 'rebar3' -n '__fish_rebar3_needs_command' -a tree -d "Print depdency tree."
|
||||
complete -f -c 'rebar3' -n '__fish_rebar3_needs_command' -a tree -d "Print dependency tree."
|
||||
|
||||
complete -f -c 'rebar3' -n '__fish_rebar3_needs_command tree' -s v -l verbose -d "Print repo and branch/tag/ref for git and hg deps."
|
||||
|
||||
|
|
|
@ -18,9 +18,9 @@ C_SRC_OUTPUT ?= $(CURDIR)/../priv/$(PROJECT).so
|
|||
UNAME_SYS := $(shell uname -s)
|
||||
ifeq ($(UNAME_SYS), Darwin)
|
||||
CC ?= cc
|
||||
CFLAGS ?= -O3 -std=c99 -arch x86_64 -finline-functions -Wall -Wmissing-prototypes
|
||||
CXXFLAGS ?= -O3 -arch x86_64 -finline-functions -Wall
|
||||
LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress
|
||||
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
|
||||
CXXFLAGS ?= -O3 -finline-functions -Wall
|
||||
LDFLAGS ?= -flat_namespace -undefined suppress
|
||||
else ifeq ($(UNAME_SYS), FreeBSD)
|
||||
CC ?= cc
|
||||
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
|
||||
|
|
10
rebar.config
10
rebar.config
|
@ -3,11 +3,11 @@
|
|||
|
||||
{deps, [{erlware_commons, "1.5.0"},
|
||||
{ssl_verify_fun, "1.1.6"},
|
||||
{certifi, "2.6.1"},
|
||||
{providers, "1.8.1"},
|
||||
{certifi, "2.8.0"},
|
||||
{providers, "1.9.0"},
|
||||
{getopt, "1.0.1"},
|
||||
{bbmustache, "1.10.0"},
|
||||
{relx, "4.5.0"},
|
||||
{bbmustache, "1.12.2"},
|
||||
{relx, "4.6.0"},
|
||||
{cf, "0.3.1"},
|
||||
{cth_readable, "1.5.1"},
|
||||
{eunit_formatters, "0.5.0"}]}.
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
{escript_name, rebar3}.
|
||||
{escript_wrappers_windows, ["cmd", "powershell"]}.
|
||||
{escript_comment, "%%Rebar3 3.17.0\n"}.
|
||||
{escript_comment, "%%Rebar3 3.18.0\n"}.
|
||||
{escript_emu_args, "%%! +sbtu +A1\n"}.
|
||||
%% escript_incl_priv is for internal rebar-private use only.
|
||||
%% Do not use outside rebar. Config interface is not stable.
|
||||
|
|
24
rebar.lock
24
rebar.lock
|
@ -1,35 +1,35 @@
|
|||
{"1.2.0",
|
||||
[{<<"bbmustache">>,{pkg,<<"bbmustache">>,<<"1.10.0">>},0},
|
||||
{<<"certifi">>,{pkg,<<"certifi">>,<<"2.6.1">>},0},
|
||||
[{<<"bbmustache">>,{pkg,<<"bbmustache">>,<<"1.12.2">>},0},
|
||||
{<<"certifi">>,{pkg,<<"certifi">>,<<"2.8.0">>},0},
|
||||
{<<"cf">>,{pkg,<<"cf">>,<<"0.3.1">>},0},
|
||||
{<<"cth_readable">>,{pkg,<<"cth_readable">>,<<"1.5.1">>},0},
|
||||
{<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.5.0">>},0},
|
||||
{<<"eunit_formatters">>,{pkg,<<"eunit_formatters">>,<<"0.5.0">>},0},
|
||||
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0},
|
||||
{<<"providers">>,{pkg,<<"providers">>,<<"1.8.1">>},0},
|
||||
{<<"relx">>,{pkg,<<"relx">>,<<"4.5.0">>},0},
|
||||
{<<"providers">>,{pkg,<<"providers">>,<<"1.9.0">>},0},
|
||||
{<<"relx">>,{pkg,<<"relx">>,<<"4.6.0">>},0},
|
||||
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.6">>},0}]}.
|
||||
[
|
||||
{pkg_hash,[
|
||||
{<<"bbmustache">>, <<"DDC927463F0E95D66CDAC889153AF08015D609124D6D79006C248AD2DE7F6ECD">>},
|
||||
{<<"certifi">>, <<"DBAB8E5E155A0763EEA978C913CA280A6B544BFA115633FA20249C3D396D9493">>},
|
||||
{<<"bbmustache">>, <<"0CABDCE0DB9FE6D3318131174B9F2B351328A4C0AFBEB3E6E99BB0E02E9B621D">>},
|
||||
{<<"certifi">>, <<"D4FB0A6BB20B7C9C3643E22507E42F356AC090A1DCEA9AB99E27E0376D695EBA">>},
|
||||
{<<"cf">>, <<"5CB902239476E141EA70A740340233782D363A31EEA8AD37049561542E6CD641">>},
|
||||
{<<"cth_readable">>, <<"F511EFCFDE04A48B014A9197FFF1B4C4860E4E35CDB8E2F3AE3C4178E20299B1">>},
|
||||
{<<"erlware_commons">>, <<"918C56D8FB3BE52AF0DF138ED6E0755E764AD4467CD7D025761F7D0A17D3DEC1">>},
|
||||
{<<"eunit_formatters">>, <<"6A9133943D36A465D804C1C5B6E6839030434B8879C5600D7DDB5B3BAD4CCB59">>},
|
||||
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>},
|
||||
{<<"providers">>, <<"70B4197869514344A8A60E2B2A4EF41CA03DEF43CFB1712ECF076A0F3C62F083">>},
|
||||
{<<"relx">>, <<"2BF90A855023023EDD000641033D1AB9F4EBD4314D1739F691 |