From: Peter Lemenkov <lemenkov@gmail.com>
Date: Fri, 4 Feb 2022 20:47:33 +0100
Subject: [PATCH] Unbundle hex_core ver. 0.7.1
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
diff --git a/apps/rebar/src/rebar.app.src.script b/apps/rebar/src/rebar.app.src.script
index 340a0989..bd8be268 100644
--- a/apps/rebar/src/rebar.app.src.script
+++ b/apps/rebar/src/rebar.app.src.script
@@ -25,6 +25,7 @@
ssl_verify_fun,
certifi,
cth_readable,
+ hex_core,
relx,
cf,
inets,
diff --git a/apps/rebar/src/rebar_hex_repos.erl b/apps/rebar/src/rebar_hex_repos.erl
index 04cdf687..9595ea58 100644
--- a/apps/rebar/src/rebar_hex_repos.erl
+++ b/apps/rebar/src/rebar_hex_repos.erl
@@ -95,7 +95,7 @@ repos(HexConfig) ->
merge_repos(RepoList ++ [HexDefaultConfig])
end.
-%% merge repos must add a field repo_name to work with r3_hex_core 0.5.0
+%% merge repos must add a field repo_name to work with hex_core 0.5.0
-spec merge_repos([repo()]) -> [repo()].
merge_repos(Repos) ->
lists:foldl(fun(R = #{name := Name}, ReposAcc) ->
@@ -147,7 +147,7 @@ update_repo_list(R, []) ->
[R].
default_repo() ->
- HexDefaultConfig = r3_hex_core:default_config(),
+ HexDefaultConfig = hex_core:default_config(),
HexDefaultConfig#{name => ?PUBLIC_HEX_REPO, repo_verify_origin => repo_verify_origin()}.
repo_verify_origin() ->
diff --git a/apps/rebar/src/rebar_httpc_adapter.erl b/apps/rebar/src/rebar_httpc_adapter.erl
index 26318d1b..7a8dc45e 100644
--- a/apps/rebar/src/rebar_httpc_adapter.erl
+++ b/apps/rebar/src/rebar_httpc_adapter.erl
@@ -1,7 +1,7 @@
%% Derived from hex_core v0.7.1 for extra flexibility.
-module(rebar_httpc_adapter).
--behaviour(r3_hex_http).
+-behaviour(hex_http).
-export([request/5]).
%%====================================================================
diff --git a/apps/rebar/src/rebar_packages.erl b/apps/rebar/src/rebar_packages.erl
index 5f39ac39..01a8730d 100644
--- a/apps/rebar/src/rebar_packages.erl
+++ b/apps/rebar/src/rebar_packages.erl
@@ -31,7 +31,7 @@ format_error({missing_package, Pkg}) ->
-spec get(rebar_hex_repos:repo(), binary()) -> {ok, map()} | {error, term()}.
get(Config, Name) ->
- try r3_hex_api_package:get(Config, Name) of
+ try hex_api_package:get(Config, Name) of
{ok, {200, _Headers, PkgInfo}} ->
{ok, PkgInfo};
{ok, {404, _, _}} ->
@@ -245,7 +245,7 @@ update_package(Name, RepoConfig=#{name := Repo}, State) ->
?MODULE:verify_table(State),
?DEBUG("Getting definition for package ~ts from repo ~ts",
[Name, rebar_hex_repos:format_repo(RepoConfig)]),
- try r3_hex_repo:get_package(get_package_repo_config(RepoConfig), Name) of
+ try hex_repo:get_package(get_package_repo_config(RepoConfig), Name) of
{ok, {200, _Headers, Releases}} ->
_ = insert_releases(Name, Releases, Repo, ?PACKAGE_TABLE),
{ok, RegistryDir} = rebar_packages:registry_dir(State),
@@ -260,7 +260,7 @@ update_package(Name, RepoConfig=#{name := Repo}, State) ->
fail;
Error ->
?DEBUG("Hex get_package request failed: ~p", [Error]),
- %% TODO: add better log message. r3_hex_core should export a format_error
+ %% TODO: add better log message. hex_core should export a format_error
?WARN("Failed to update package ~ts from repo ~ts", [Name, Repo]),
fail
catch
diff --git a/apps/rebar/src/rebar_pkg_resource.erl b/apps/rebar/src/rebar_pkg_resource.erl
index d7d4f25a..4778cc30 100644
--- a/apps/rebar/src/rebar_pkg_resource.erl
+++ b/apps/rebar/src/rebar_pkg_resource.erl
@@ -142,7 +142,7 @@ format_error({bad_registry_checksum, Name, Vsn, Expected, Found}) ->
-> {ok, cached} | {ok, binary(), binary()} | error.
request(Config, Name, Version, ETag) ->
Config1 = Config#{http_etag => ETag},
- try r3_hex_repo:get_tarball(Config1, Name, Version) of
+ try hex_repo:get_tarball(Config1, Name, Version) of
{ok, {200, #{<<"etag">> := ETag1}, Tarball}} ->
{ok, Tarball, ETag1};
{ok, {304, _Headers, _}} ->
@@ -247,7 +247,7 @@ serve_from_cache(TmpDir, CachePath, Pkg) ->
serve_from_memory(TmpDir, Binary, {pkg, _Name, _Vsn, OldHash, Hash, _RepoConfig}) ->
RegistryChecksum = list_to_integer(binary_to_list(Hash), 16),
OldRegistryChecksum = maybe_old_registry_checksum(OldHash),
- case r3_hex_tarball:unpack(Binary, TmpDir) of
+ case hex_tarball:unpack(Binary, TmpDir) of
{ok, #{outer_checksum := <<Checksum:256/big-unsigned>>} = Res} when RegistryChecksum =/= Checksum ->
#{inner_checksum := <<OldChecksum:256/big-unsigned>>} = Res,
%% Not triggerable in tests, but code feels logically wrong without it since inner checksums are not hard
diff --git a/apps/rebar/src/vendored/r3_hex_api.erl b/apps/rebar/src/vendored/r3_hex_api.erl
deleted file mode 100644
index 51bae96b..00000000
--- a/apps/rebar/src/vendored/r3_hex_api.erl
+++ /dev/null
@@ -1,142 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% @hidden
-
--module(r3_hex_api).
-
--export([
- delete/2,
- get/2,
- post/3,
- put/3,
- encode_query_string/1,
- build_repository_path/2,
- build_organization_path/2,
- join_path_segments/1
-]).
--define(ERL_CONTENT_TYPE, <<"application/vnd.hex+erlang">>).
-
--export_type([body/0, response/0]).
-
--type response() :: {ok, {r3_hex_http:status(), r3_hex_http:headers(), body() | nil}} | {error, term()}.
--type body() :: [body()] | #{binary() => body() | binary()}.
-
-get(Config, Path) ->
- request(Config, get, Path, undefined).
-
-post(Config, Path, Body) ->
- request(Config, post, Path, encode_body(Body)).
-
-put(Config, Path, Body) ->
- request(Config, put, Path, encode_body(Body)).
-
-delete(Config, Path) ->
- request(Config, delete, Path, undefined).
-
-%% @private
-encode_query_string(List) ->
- Pairs = lists:map(fun ({K, V}) -> {to_list(K), to_list(V)} end, List),
- list_to_binary(compose_query(Pairs)).
-
-%% OTP 21+
--ifdef (OTP_RELEASE).
-compose_query(Pairs) ->
- uri_string:compose_query(Pairs).
--else.
-compose_query(Pairs) ->
- String = join("&", lists:map(fun ({K, V}) -> K ++ "=" ++ V end, Pairs)),
- http_uri:encode(String).
--endif.
-
-%% @private
-build_repository_path(#{api_repository := Repo}, Path) when is_binary(Repo) ->
- ["repos", Repo | Path];
-build_repository_path(#{api_repository := undefined}, Path) ->
- Path.
-
-%% @private
-build_organization_path(#{api_organization := Org}, Path) when is_binary(Org) ->
- ["orgs", Org | Path];
-build_organization_path(#{api_organization := undefined}, Path) ->
- Path.
-
-%% @private
-join_path_segments(Segments) ->
- iolist_to_binary(recompose(Segments)).
-
-%% OTP 21+
--ifdef (OTP_RELEASE).
-recompose(Segments) ->
- Concatenated = join(<<"/">>, Segments),
- %% uri_string:recompose/1 accepts path segments as a list,
- %% both strings and binaries
- uri_string:recompose(#{path => Concatenated}).
--else.
-recompose(Segments) ->
- join(<<"/">>, lists:map(fun encode_segment/1, Segments)).
-
-encode_segment(Binary) when is_binary(Binary) ->
- encode_segment(binary_to_list(Binary));
-encode_segment(String) when is_list(String) ->
- http_uri:encode(String).
--endif.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-request(Config, Method, PathSegments, Body) when is_list(PathSegments) ->
- Path = join_path_segments(PathSegments),
- request(Config, Method, Path, Body);
-request(Config, Method, Path, Body) when is_binary(Path) and is_map(Config) ->
- DefaultHeaders = make_headers(Config),
- ReqHeaders = maps:merge(maps:get(http_headers, Config, #{}), DefaultHeaders),
- ReqHeaders2 = put_new(<<"accept">>, ?ERL_CONTENT_TYPE, ReqHeaders),
-
- case r3_hex_http:request(Config, Method, build_url(Path, Config), ReqHeaders2, Body) of
- {ok, {Status, RespHeaders, RespBody}} ->
- ContentType = maps:get(<<"content-type">>, RespHeaders, <<"">>),
- case binary:match(ContentType, ?ERL_CONTENT_TYPE) of
- {_, _} ->
- {ok, {Status, RespHeaders, binary_to_term(RespBody)}};
-
- nomatch ->
- {ok, {Status, RespHeaders, nil}}
- end;
-
- Other ->
- Other
- end.
-
-build_url(Path, #{api_url := URI}) ->
- <<URI/binary, "/", Path/binary>>.
-
-encode_body({_ContentType, _Body} = Body) ->
- Body;
-encode_body(Body) ->
- {binary_to_list(?ERL_CONTENT_TYPE), term_to_binary(Body)}.
-
-%% TODO: copy-pasted from r3_hex_repo
-make_headers(Config) ->
- maps:fold(fun set_header/3, #{}, Config).
-
-set_header(api_key, Token, Headers) when is_binary(Token) -> maps:put(<<"authorization">>, Token, Headers);
-set_header(_, _, Headers) -> Headers.
-
-put_new(Key, Value, Map) ->
- case maps:find(Key, Map) of
- {ok, _} -> Map;
- error -> maps:put(Key, Value, Map)
- end.
-
-%% https://github.com/erlang/otp/blob/OTP-20.3/lib/stdlib/src/lists.erl#L1449:L1453
-join(_Sep, []) -> [];
-join(Sep, [H|T]) -> [H|join_prepend(Sep, T)].
-
-join_prepend(_Sep, []) -> [];
-join_prepend(Sep, [H|T]) -> [Sep,H|join_prepend(Sep,T)].
-
-to_list(A) when is_atom(A) -> atom_to_list(A);
-to_list(B) when is_binary(B) -> unicode:characters_to_list(B);
-to_list(I) when is_integer(I) -> integer_to_list(I);
-to_list(Str) -> unicode:characters_to_list(Str).
diff --git a/apps/rebar/src/vendored/r3_hex_api_key.erl b/apps/rebar/src/vendored/r3_hex_api_key.erl
deleted file mode 100644
index 8c93022a..00000000
--- a/apps/rebar/src/vendored/r3_hex_api_key.erl
+++ /dev/null
@@ -1,159 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_api_key).
--export([
- list/1,
- get/2,
- add/3,
- delete/2,
- delete_all/1
-]).
-
--export_type([permission/0]).
-
--type permission() :: api_permission() | repo_permission() | repos_permission().
--ifdef(OTP_19).
--type api_permission() :: #{domain := api, resource => read | write}.
--type repo_permission() :: #{domain := repository, resource := binary()}.
--type repos_permission() :: #{domain := repositories}.
--else.
--type api_permission() :: #{domain => api, resource => read | write}.
--type repo_permission() :: #{domain => repository, resource => binary()}.
--type repos_permission() :: #{domain => repositories}.
--endif.
-
-%% @doc
-%% Lists the user's or organization's API and repository keys.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_key:list(r3_hex_core:default_config()).
-%% {ok, {200, ..., [#{
-%% <<"authing_key">> => true,
-%% <<"inserted_at">> => <<"2019-02-27T11:15:32Z">>,
-%% <<"last_use">> =>
-%% #{<<"ip">> => <<"1.2.3.4">>,
-%% <<"used_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"user_agent">> => <<"hex_core/0.5.0 (httpc) (OTP/21) (erts/10.2)">>},
-%% <<"name">> => <<"hex_core">>,
-%% <<"permissions">> => [#{<<"domain">> => <<"api">>,<<"resource">> => <<"read">>}],
-%% <<"revoked_at">> => nil,
-%% <<"updated_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"url">> => <<"https://hex.pm/api/keys/test">>},
-%% }]}}
-%% '''
-%% @end
--spec list(r3_hex_core:config()) -> r3_hex_api:response().
-list(Config) when is_map(Config) ->
- Path = r3_hex_api:build_organization_path(Config, ["keys"]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Gets an API or repository key by name.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_key:get(r3_hex_core:default_config(), <<"test">>).
-%% {ok, {200, ..., #{
-%% <<"authing_key">> => true,
-%% <<"inserted_at">> => <<"2019-02-27T11:15:32Z">>,
-%% <<"last_use">> =>
-%% #{<<"ip">> => <<"1.2.3.4">>,
-%% <<"used_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"user_agent">> => <<"hex_core/0.5.0 (httpc) (OTP/21) (erts/10.2)">>},
-%% <<"name">> => <<"hex_core">>,
-%% <<"permissions">> => [#{<<"domain">> => <<"api">>,<<"resource">> => <<"read">>}],
-%% <<"revoked_at">> => nil,
-%% <<"updated_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"url">> => <<"https://hex.pm/api/keys/test">>},
-%% }}}
-%% '''
-%% @end
--spec get(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-get(Config, Name) when is_map(Config) and is_binary(Name) ->
- Path = r3_hex_api:build_organization_path(Config, ["keys", Name]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Adds a new API or repository key.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_key:add(r3_hex_core:default_config(), <<"test">>, [...]).
-%% {ok, {200, ..., #{
-%% <<"authing_key">> => true,
-%% <<"inserted_at">> => <<"2019-02-27T11:15:32Z">>,
-%% <<"last_use">> =>
-%% #{<<"ip">> => <<"1.2.3.4">>,
-%% <<"used_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"user_agent">> => <<"hex_core/0.5.0 (httpc) (OTP/21) (erts/10.2)">>},
-%% <<"name">> => <<"hex_core">>,
-%% <<"permissions">> => [#{<<"domain">> => <<"api">>,<<"resource">> => <<"read">>}],
-%% <<"revoked_at">> => nil,
-%% <<"updated_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"url">> => <<"https://hex.pm/api/keys/test">>},
-%% }}}
-%% '''
-%% @end
--spec add(r3_hex_core:config(), binary(), [permission()]) -> r3_hex_api:response().
-add(Config, Name, Permissions) when is_map(Config) and is_binary(Name) and is_list(Permissions) ->
- Path = r3_hex_api:build_organization_path(Config, ["keys"]),
- Params = #{<<"name">> => Name, <<"permissions">> => Permissions},
- r3_hex_api:post(Config, Path, Params).
-
-%% @doc
-%% Deletes an API or repository key.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_key:delete(r3_hex_core:default_config(), <<"test">>).
-%% {ok, {200, ..., #{
-%% <<"authing_key">> => true,
-%% <<"inserted_at">> => <<"2019-02-27T11:15:32Z">>,
-%% <<"last_use">> =>
-%% #{<<"ip">> => <<"1.2.3.4">>,
-%% <<"used_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"user_agent">> => <<"hex_core/0.5.0 (httpc) (OTP/21) (erts/10.2)">>},
-%% <<"name">> => <<"hex_core">>,
-%% <<"permissions">> => [#{<<"domain">> => <<"api">>,<<"resource">> => <<"read">>}],
-%% <<"revoked_at">> => nil,
-%% <<"updated_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"url">> => <<"https://hex.pm/api/keys/test">>},
-%% }}}
-%% '''
-%% @end
--spec delete(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-delete(Config, Name) when is_map(Config) and is_binary(Name) ->
- Path = r3_hex_api:build_organization_path(Config, ["keys", Name]),
- r3_hex_api:delete(Config, Path).
-
-%% @doc
-%% Deletes all API and repository keys associated with the account.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_key:delete_all(r3_hex_core:default_config()).
-%% {ok, {200, ..., [#{
-%% <<"authing_key">> => true,
-%% <<"inserted_at">> => <<"2019-02-27T11:15:32Z">>,
-%% <<"last_use">> =>
-%% #{<<"ip">> => <<"1.2.3.4">>,
-%% <<"used_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"user_agent">> => <<"hex_core/0.5.0 (httpc) (OTP/21) (erts/10.2)">>},
-%% <<"name">> => <<"hex_core">>,
-%% <<"permissions">> => [#{<<"domain">> => <<"api">>,<<"resource">> => <<"read">>}],
-%% <<"revoked_at">> => nil,
-%% <<"updated_at">> => <<"2019-02-27T14:38:54Z">>,
-%% <<"url">> => <<"https://hex.pm/api/keys/test">>},
-%% }]}}
-%% '''
-%% @end
--spec delete_all(r3_hex_core:config()) -> r3_hex_api:response().
-delete_all(Config) when is_map(Config) ->
- Path = r3_hex_api:build_organization_path(Config, ["keys"]),
- r3_hex_api:delete(Config, Path).
diff --git a/apps/rebar/src/vendored/r3_hex_api_package.erl b/apps/rebar/src/vendored/r3_hex_api_package.erl
deleted file mode 100644
index 71c1ad10..00000000
--- a/apps/rebar/src/vendored/r3_hex_api_package.erl
+++ /dev/null
@@ -1,51 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_api_package).
--export([get/2, search/3]).
-
-%% @doc
-%% Gets a package.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package:get(r3_hex_core:default_config(), <<"package">>).
-%% {ok, {200, ..., #{
-%% <<"name">> => <<"package1">>,
-%% <<"meta">> => #{
-%% <<"description">> => ...,
-%% <<"licenses">> => ...,
-%% <<"links">> => ...,
-%% <<"maintainers">> => ...
-%% },
-%% ...,
-%% <<"releases">> => [
-%% #{<<"url">> => ..., <<"version">> => <<"0.5.0">>}],
-%% #{<<"url">> => ..., <<"version">> => <<"1.0.0">>}],
-%% ...
-%% ]}}}
-%% '''
-%% @end
--spec get(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-get(Config, Name) when is_map(Config) and is_binary(Name)->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Searches packages.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package:search(r3_hex_core:default_config(), <<"package">>, []).
-%% {ok, {200, ..., [
-%% #{<<"name">> => <<"package1">>, ...},
-%% ...
-%% ]}}
-%% '''
--spec search(r3_hex_core:config(), binary(), list(binary())) -> r3_hex_api:response().
-search(Config, Query, SearchParams) when is_map(Config) and is_binary(Query) and is_list(SearchParams) ->
- QueryString = r3_hex_api:encode_query_string([{search, Query} | SearchParams]),
- Path = r3_hex_api:join_path_segments(r3_hex_api:build_repository_path(Config, ["packages"])),
- PathQuery = <<Path/binary, "?", QueryString/binary>>,
- r3_hex_api:get(Config, PathQuery).
diff --git a/apps/rebar/src/vendored/r3_hex_api_package_owner.erl b/apps/rebar/src/vendored/r3_hex_api_package_owner.erl
deleted file mode 100644
index 396b2308..00000000
--- a/apps/rebar/src/vendored/r3_hex_api_package_owner.erl
+++ /dev/null
@@ -1,98 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_api_package_owner).
--export([
- add/5,
- delete/3,
- get/3,
- list/2
-]).
-
-%% @doc
-%% Lists the packages owners.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package_owner:list(r3_hex_core:default_config(), <<"package">>).
-%% {ok, {200, ..., [#{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }]}}
-%% '''
-%% @end
--spec list(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-list(Config, PackageName) when is_binary(PackageName) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", PackageName, "owners"]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Gets a packages owner.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package_owner:get(r3_hex_core:default_config(), <<"package">>, <<"user">>).
-%% {ok, {200, ..., #{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }}}
-%% '''
-%% @end
--spec get(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
-get(Config, PackageName, UsernameOrEmail) when is_map(Config) and is_binary(PackageName) and is_binary(UsernameOrEmail) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", PackageName, "owners", UsernameOrEmail]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Adds a packages owner.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package_owner:add(r3_hex_core:default_config(), <<"package">>, <<"user">>, <<"full">>, false).
-%% {ok, {200, ..., #{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }}}
-%% '''
-%% @end
--spec add(r3_hex_core:config(), binary(), binary(), binary(), boolean()) -> r3_hex_api:response().
-add(Config, PackageName, UsernameOrEmail, Level, Transfer)
-when is_binary(PackageName) and is_binary(UsernameOrEmail) and is_map(Config) and is_binary(Level) and is_boolean(Transfer) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", PackageName, "owners", UsernameOrEmail]),
- r3_hex_api:put(Config, Path, #{<<"level">> => Level, <<"transfer">> => Transfer}).
-
-
-%% @doc
-%% Deletes a packages owner.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_package_owner:delete(r3_hex_core:default_config(), <<"package">>, <<"user">>).
-%% {ok, {204, ..., nil}}
-%% '''
-%% @end
--spec delete(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
-delete(Config, PackageName, UsernameOrEmail) when is_map(Config) and is_binary(PackageName) and is_binary(UsernameOrEmail) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", PackageName, "owners", UsernameOrEmail]),
- r3_hex_api:delete(Config, Path).
diff --git a/apps/rebar/src/vendored/r3_hex_api_release.erl b/apps/rebar/src/vendored/r3_hex_api_release.erl
deleted file mode 100644
index 92d9fdd2..00000000
--- a/apps/rebar/src/vendored/r3_hex_api_release.erl
+++ /dev/null
@@ -1,173 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_api_release).
--export([
- delete/3,
- get/3,
- publish/2,
- publish/3,
- retire/4,
- unretire/3
-]).
-
--export_type([publish_params/0, retirement_params/0, retirement_reason/0]).
-
--type publish_params() :: [{replace, boolean()}].
-
--type retirement_reason() :: other | invalid | security | deprecated | renamed.
-
--ifdef(OTP_19).
--type retirement_params() :: #{reason := retirement_reason(), message => binary()}.
--else.
--type retirement_params() :: #{reason => retirement_reason(), message => binary()}.
--endif.
-%% @doc
-%% Gets a package release.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:get(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
-%% {ok, {200, ..., #{
-%% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
-%% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
-%% <<"downloads">> => 740,<<"has_docs">> => true,
-%% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
-%% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
-%% <<"meta">> =>
-%% #{<<"app">> => <<"package">>,
-%% <<"build_tools">> => [<<"mix">>]},
-%% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
-%% <<"publisher">> => nil,<<"requirements">> => #{},
-%% <<"retirement">> => nil,
-%% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
-%% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
-%% <<"version">> => <<"1.0.0">>
-%% }}}
-%% '''
-%% @end
--spec get(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
-get(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version]),
- r3_hex_api:get(Config, Path).
-
-%% @doc
-%% Publishes a new package release.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:publish(r3_hex_core:default_config(), Tarball).
-%% {ok, {200, ..., #{
-%% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
-%% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
-%% <<"downloads">> => 740,<<"has_docs">> => true,
-%% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
-%% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
-%% <<"meta">> =>
-%% #{<<"app">> => <<"package">>,
-%% <<"build_tools">> => [<<"mix">>]},
-%% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
-%% <<"publisher">> => nil,<<"requirements">> => #{},
-%% <<"retirement">> => nil,
-%% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
-%% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
-%% <<"version">> => <<"1.0.0">>
-%% }}}
-%% '''
-%% @end
--spec publish(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-publish(Config, Tarball) -> publish(Config, Tarball, []).
-
-
-%% @doc
-%% Publishes a new package release with query parameters.
-%%
-%% Supported query params :
-%% - replace : boolean
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:publish(r3_hex_core:default_config(), Tarball, [{replace, true}]).
-%% {ok, {201, ..., #{
-%% <<"checksum">> => <<"540d210d81f56f17f64309a4896430e727972499b37bd59342dc08d61dff74d8">>,
-%% <<"docs_html_url">> => <<"https://hexdocs.pm/package/1.0.0/">>,
-%% <<"downloads">> => 740,<<"has_docs">> => true,
-%% <<"html_url">> => <<"https://hex.pm/packages/package/1.0.0">>,
-%% <<"inserted_at">> => <<"2014-12-09T18:32:03Z">>,
-%% <<"meta">> =>
-%% #{<<"app">> => <<"package">>,
-%% <<"build_tools">> => [<<"mix">>]},
-%% <<"package_url">> => <<"https://hex.pm/api/packages/package">>,
-%% <<"publisher">> => nil,<<"requirements">> => #{},
-%% <<"retirement">> => nil,
-%% <<"updated_at">> => <<"2019-07-28T21:12:11Z">>,
-%% <<"url">> => <<"https://hex.pm/api/packages/package/releases/1.0.0">>,
-%% <<"version">> => <<"1.0.0">>
-%% }}}
-%% '''
-%% @end
--spec publish(r3_hex_core:config(), binary(), publish_params()) -> r3_hex_api:response().
-publish(Config, Tarball, Params) when is_map(Config) andalso is_binary(Tarball) andalso is_list(Params)->
- QueryString = r3_hex_api:encode_query_string([{replace, proplists:get_value(replace, Params, false)}]),
- Path = r3_hex_api:join_path_segments(r3_hex_api:build_repository_path(Config, ["publish"])),
- PathWithQuery = <<Path/binary, "?", QueryString/binary>>,
- TarballContentType = "application/octet-stream",
- Config2 = put_header(<<"content-length">>, integer_to_binary(byte_size(Tarball)), Config),
- Body = {TarballContentType, Tarball},
- r3_hex_api:post(Config2, PathWithQuery, Body).
-
-%% @doc
-%% Deletes a package release.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:delete(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
-%% {ok, {204, ..., nil}}
-%% '''
-%% @end
--spec delete(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
-delete(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version]),
- r3_hex_api:delete(Config, Path).
-
-%% @doc
-%% Retires a package release.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:retire(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>, Params).
-%% {ok, {204, ..., nil}}
-%% '''
-%% @end
--spec retire(r3_hex_core:config(), binary(), binary(), retirement_params()) -> r3_hex_api:response().
-retire(Config, Name, Version, Params) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version, "retire"]),
- r3_hex_api:post(Config, Path, Params).
-
-%% @doc
-%% Unretires a package release.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_release:unretire(r3_hex_core:default_config(), <<"package">>, <<"1.0.0">>).
-%% {ok, {204, ..., nil}}
-%% '''
-%% @end
--spec unretire(r3_hex_core:config(), binary(), binary()) -> r3_hex_api:response().
-unretire(Config, Name, Version) when is_map(Config) and is_binary(Name) and is_binary(Version) ->
- Path = r3_hex_api:build_repository_path(Config, ["packages", Name, "releases", Version, "retire"]),
- r3_hex_api:delete(Config, Path).
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-put_header(Name, Value, Config) ->
- Headers = maps:get(http_headers, Config, #{}),
- Headers2 = maps:put(Name, Value, Headers),
- maps:put(http_headers, Headers2, Config).
diff --git a/apps/rebar/src/vendored/r3_hex_api_user.erl b/apps/rebar/src/vendored/r3_hex_api_user.erl
deleted file mode 100644
index 526f62b8..00000000
--- a/apps/rebar/src/vendored/r3_hex_api_user.erl
+++ /dev/null
@@ -1,98 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_api_user).
--export([
- create/4,
- get/2,
- me/1,
- reset_password/2
-]).
-
-%% @doc
-%% Gets the authenticated user.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_user:me(r3_hex_core:default_config()).
-%% {ok, {200, ..., #{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }}}
-%% '''
-%% @end
--spec me(r3_hex_core:config()) -> r3_hex_api:response().
-me(Config) when is_map(Config) ->
- r3_hex_api:get(Config, ["users", "me"]).
-
-%% @doc
-%% Creates a new user account.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_user:create(r3_hex_core:default_config(), <<"user">>, <<"hunter42">>, <<"user@example.com">>).
-%% {ok, {201, ..., #{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }}}
-%% '''
-%% @end
--spec create(r3_hex_core:config(), binary(), binary(), binary()) -> r3_hex_api:response().
-create(Config, Username, Password, Email)
-when is_map(Config) and is_binary(Username) and is_binary(Password) and is_binary(Email) ->
- Params = #{
- <<"username">> => Username,
- <<"password">> => Password,
- <<"email">> => Email
- },
- r3_hex_api:post(Config, ["users"], Params).
-
-%% @doc
-%% Resets the user's password.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_user:reset_password(r3_hex_core:default_config(), <<"user">>).
-%% {ok, {204, ..., nil}}
-%% '''
-%% @end
--spec reset_password(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-reset_password(Config, Username) when is_map(Config) and is_binary(Username) ->
- r3_hex_api:post(Config, ["users", Username, "reset"], #{}).
-
-%% @doc
-%% Gets a user.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_api_user:get(r3_hex_core:default_config()).
-%% {ok, {200, ..., #{
-%% <<"email">> => <<"user@example.com">>,
-%% <<"full_name">> => <<"John Doe">>,
-%% <<"handles">> => #{...},
-%% <<"inserted_at">> => <<"2014-04-21T17:20:12Z">>,
-%% <<"level">> => <<"full">>,
-%% <<"updated_at">> => <<"2019-08-04T19:28:05Z">>,
-%% <<"url">> => <<"https://hex.pm/api/users/user">>,
-%% <<"username">> => <<"user">>
-%% }}}
-%% '''
-%% @end
--spec get(r3_hex_core:config(), binary()) -> r3_hex_api:response().
-get(Config, Username) when is_map(Config) and is_binary(Username) ->
- r3_hex_api:get(Config, ["users", Username]).
diff --git a/apps/rebar/src/vendored/r3_hex_core.erl b/apps/rebar/src/vendored/r3_hex_core.erl
deleted file mode 100644
index de7c8934..00000000
--- a/apps/rebar/src/vendored/r3_hex_core.erl
+++ /dev/null
@@ -1,95 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% @doc
-%% hex_core entrypoint module.
-%%
-%% ### Config
-%%
-%% Most functions in the hex_core API takes a configuration. The configuration sets things
-%% like HTTP client to use, and API and repository URL. Some of these configuration options
-%% will likely be static for your application and some may change depending on the function
-%% you call.
-%%
-%% ##### Options
-%%
-%% * `api_key' - Authentication key used when accessing the HTTP API.
-%% * `api_organization' - Name of the organization endpoint in the API, this should
-%% for example be set when accessing key for a specific organization.
-%% * `api_repository' - Name of the repository endpoint in the API, this should
-%% for example be set when accessing packages from a specific repository.
-%% * `api_url' - URL to the HTTP API (default: `https://hex.pm/api').
-%% * `http_adapter' - A tuple of a callback module used for HTTP requests, see [`r3_hex_http'](r3_hex_http.html)
-%% (default: `r3_hex_http_httpc') and the configuration to pass to the HTTP adapter.
-%% * `http_etag' - Sets the `if-none-match' HTTP header with the given value to do a
-%% conditional HTTP request.
-%% * `http_user_agent_fragment' - Will be appended to the `user-agent` HTTP header (default: `(httpc)').
-%% * `repo_key' - Authentication key used when accessing the repository.
-%% * `repo_name' - Name of the repository, used for verifying the repository signature
-%% authenticity (default: `hexpm').
-%% * `repo_public_key' - Public key used to verify the repository signature
-%% (defaults to hexpm public key `https://hex.pm/docs/public_keys').
-%% * `repo_url' - URL to the repository (default: `https://repo.hex.pm').
-%% * `repo_organization' - Name of the organization repository, appends `/repos/:name'
-%% to the repository URL and overrides the `repo_name' option.
-%% * `repo_verify' - If `true' will verify the repository signature (default: `true').
-%% * `repo_verify_origin' - If `true' will verify the repository signature origin,
-%% requires protobuf messages as of hex_core v0.4.0 (default: `true').
-
--module(r3_hex_core).
--export([default_config/0]).
-
--export_type([config/0]).
-
-%% https://hex.pm/docs/public_keys
--define(HEXPM_PUBLIC_KEY, <<"-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApqREcFDt5vV21JVe2QNB
-Edvzk6w36aNFhVGWN5toNJRjRJ6m4hIuG4KaXtDWVLjnvct6MYMfqhC79HAGwyF+
-IqR6Q6a5bbFSsImgBJwz1oadoVKD6ZNetAuCIK84cjMrEFRkELtEIPNHblCzUkkM
-3rS9+DPlnfG8hBvGi6tvQIuZmXGCxF/73hU0/MyGhbmEjIKRtG6b0sJYKelRLTPW
-XgK7s5pESgiwf2YC/2MGDXjAJfpfCd0RpLdvd4eRiXtVlE9qO9bND94E7PgQ/xqZ
-J1i2xWFndWa6nfFnRxZmCStCOZWYYPlaxr+FZceFbpMwzTNs4g3d4tLNUcbKAIH4
-0wIDAQAB
------END PUBLIC KEY-----">>).
-
-
--type config() :: #{
- api_key => binary() | undefined,
- api_organization => binary() | undefined,
- api_repository => binary() | undefined,
- api_url => binary(),
- http_adapter => {module(), map()},
- http_etag => binary() | undefined,
- http_headers => map(),
- http_user_agent_fragment => binary(),
- repo_key => binary() | undefined,
- repo_name => binary(),
- repo_public_key => binary(),
- repo_url => binary(),
- repo_organization => binary() | undefined,
- repo_verify => boolean(),
- repo_verify_origin => boolean(),
- tarball_max_size => pos_integer(),
- tarball_max_uncompressed_size => pos_integer()
-}.
-
--spec default_config() -> config().
-default_config() ->
- #{
- api_key => undefined,
- api_organization => undefined,
- api_repository => undefined,
- api_url => <<"https://hex.pm/api">>,
- http_adapter => {r3_hex_http_httpc, #{profile => default}},
- http_etag => undefined,
- http_headers => #{},
- http_user_agent_fragment => <<"(httpc)">>,
- repo_key => undefined,
- repo_name => <<"hexpm">>,
- repo_public_key => ?HEXPM_PUBLIC_KEY,
- repo_url => <<"https://repo.hex.pm">>,
- repo_organization => undefined,
- repo_verify => true,
- repo_verify_origin => true,
- tarball_max_size => 8 * 1024 * 1024,
- tarball_max_uncompressed_size => 64 * 1024 * 1024
- }.
diff --git a/apps/rebar/src/vendored/r3_hex_core.hrl b/apps/rebar/src/vendored/r3_hex_core.hrl
deleted file mode 100644
index e3dacdab..00000000
--- a/apps/rebar/src/vendored/r3_hex_core.hrl
+++ /dev/null
@@ -1,3 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--define(HEX_CORE_VERSION, "0.7.1").
diff --git a/apps/rebar/src/vendored/r3_hex_erl_tar.erl b/apps/rebar/src/vendored/r3_hex_erl_tar.erl
deleted file mode 100644
index a015d23f..00000000
--- a/apps/rebar/src/vendored/r3_hex_erl_tar.erl
+++ /dev/null
@@ -1,2016 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% @private
-%% Copied from https://github.com/erlang/otp/blob/OTP-20.0.1/lib/stdlib/src/erl_tar.erl
-%% with modifications:
-%% - Change module name to `r3_hex_erl_tar`
-%% - Set tar mtimes to 0 and remove dependency on :os.system_time/1
-%% - Preserve modes when building tarball
-%% - Do not crash if failing to write tar
-%% - Allow setting file_info opts on :r3_hex_erl_tar.add
-%% - Add safe_relative_path_links/2 to check directory traversal vulnerability when extracting files,
-%% it differs from OTP's current fix (2020-02-04) in that it checks regular files instead of
-%% symlink targets. This allows creating symlinks with relative path targets such as `../tmp/log`
-%% - Remove ram_file usage (backported from OTP master)
-
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2017. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%% This module implements extraction/creation of tar archives.
-%% It supports reading most common tar formats, namely V7, STAR,
-%% USTAR, GNU, BSD/libarchive, and PAX. It produces archives in USTAR
-%% format, unless it must use PAX headers, in which case it produces PAX
-%% format.
-%%
-%% The following references where used:
-%% http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
-%% http://www.gnu.org/software/tar/manual/html_node/Standard.html
-%% http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html
--module(r3_hex_erl_tar).
-
--export([init/3,
- create/2, create/3,
- extract/1, extract/2,
- table/1, table/2, t/1, tt/1,
- open/2, close/1,
- add/3, add/4, add/5,
- format_error/1]).
-
--include_lib("kernel/include/file.hrl").
--include_lib("r3_hex_erl_tar.hrl").
-
-%% Converts the short error reason to a descriptive string.
--spec format_error(term()) -> string().
-format_error(invalid_tar_checksum) ->
- "Checksum failed";
-format_error(bad_header) ->
- "Unrecognized tar header format";
-format_error({bad_header, Reason}) ->
- lists:flatten(io_lib:format("Unrecognized tar header format: ~p", [Reason]));
-format_error({invalid_header, negative_size}) ->
- "Invalid header: negative size";
-format_error(invalid_sparse_header_size) ->
- "Invalid sparse header: negative size";
-format_error(invalid_sparse_map_entry) ->
- "Invalid sparse map entry";
-format_error({invalid_sparse_map_entry, Reason}) ->
- lists:flatten(io_lib:format("Invalid sparse map entry: ~p", [Reason]));
-format_error(invalid_end_of_archive) ->
- "Invalid end of archive";
-format_error(eof) ->
- "Unexpected end of file";
-format_error(integer_overflow) ->
- "Failed to parse numeric: integer overflow";
-format_error({misaligned_read, Pos}) ->
- lists:flatten(io_lib:format("Read a block which was misaligned: block_size=~p pos=~p",
- [?BLOCK_SIZE, Pos]));
-format_error(invalid_gnu_1_0_sparsemap) ->
- "Invalid GNU sparse map (version 1.0)";
-format_error({invalid_gnu_0_1_sparsemap, Format}) ->
- lists:flatten(io_lib:format("Invalid GNU sparse map (version ~s)", [Format]));
-format_error(unsafe_path) ->
- "The path points above the current working directory";
-format_error({Name,Reason}) ->
- lists:flatten(io_lib:format("~ts: ~ts", [Name,format_error(Reason)]));
-format_error(Atom) when is_atom(Atom) ->
- file:format_error(Atom);
-format_error(Term) ->
- lists:flatten(io_lib:format("~tp", [Term])).
-
-%% Initializes a new reader given a custom file handle and I/O wrappers
--spec init(handle(), write | read, file_op()) -> {ok, reader()} | {error, badarg}.
-init(Handle, AccessMode, Fun) when is_function(Fun, 2) ->
- Reader = #reader{handle=Handle,access=AccessMode,func=Fun},
- {ok, Pos, Reader2} = do_position(Reader, {cur, 0}),
- {ok, Reader2#reader{pos=Pos}};
-init(_Handle, _AccessMode, _Fun) ->
- {error, badarg}.
-
-%%%================================================================
-%% Extracts all files from the tar file Name.
--spec extract(open_handle()) -> ok | {error, term()}.
-extract(Name) ->
- extract(Name, []).
-
-%% Extracts (all) files from the tar file Name.
-%% Options accepted:
-%% - cooked: Opens the tar file without mode `raw`
-%% - compressed: Uncompresses the tar file when reading
-%% - memory: Returns the tar contents as a list of tuples {Name, Bin}
-%% - keep_old_files: Extracted files will not overwrite the destination
-%% - {files, ListOfFilesToExtract}: Only extract ListOfFilesToExtract
-%% - verbose: Prints verbose information about the extraction,
-%% - {cwd, AbsoluteDir}: Sets the current working directory for the extraction
--spec extract(open_handle(), [extract_opt()]) ->
- ok
- | {ok, [{string(), binary()}]}
- | {error, term()}.
-extract({binary, Bin}, Opts) when is_list(Opts) ->
- do_extract({binary, Bin}, Opts);
-extract({file, Fd}, Opts) when is_list(Opts) ->
- do_extract({file, Fd}, Opts);
-extract(#reader{}=Reader, Opts) when is_list(Opts) ->
- do_extract(Reader, Opts);
-extract(Name, Opts) when is_list(Name); is_binary(Name), is_list(Opts) ->
- do_extract(Name, Opts).
-
-do_extract(Handle, Opts) when is_list(Opts) ->
- Opts2 = extract_opts(Opts),
- Acc = if Opts2#read_opts.output =:= memory -> []; true -> ok end,
- foldl_read(Handle, fun extract1/4, Acc, Opts2).
-
-extract1(eof, Reader, _, Acc) when is_list(Acc) ->
- {ok, {ok, lists:reverse(Acc)}, Reader};
-extract1(eof, Reader, _, leading_slash) ->
- error_logger:info_msg("erl_tar: removed leading '/' from member names\n"),
- {ok, ok, Reader};
-extract1(eof, Reader, _, Acc) ->
- {ok, Acc, Reader};
-extract1(#tar_header{name=Name,size=Size}=Header, Reader0, Opts, Acc0) ->
- case check_extract(Name, Opts) of
- true ->
- case do_read(Reader0, Size) of
- {ok, Bin, Reader1} ->
- Acc = extract2(Header, Bin, Opts, Acc0),
- {ok, Acc, Reader1};
- {error, _} = Err ->
- throw(Err)
- end;
- false ->
- {ok, Acc0, skip_file(Reader0)}
- end.
-
-extract2(Header, Bin, Opts, Acc) ->
- case write_extracted_element(Header, Bin, Opts) of
- ok ->
- case Header of
- #tar_header{name="/"++_} ->
- leading_slash;
- #tar_header{} ->
- Acc
- end;
- {ok, NameBin} when is_list(Acc) ->
- [NameBin | Acc];
- {error, _} = Err ->
- throw(Err)
- end.
-
-%% Checks if the file Name should be extracted.
-check_extract(_, #read_opts{files=all}) ->
- true;
-check_extract(Name, #read_opts{files=Files}) ->
- ordsets:is_element(Name, Files).
-
-%%%================================================================
-%% The following table functions produce a list of information about
-%% the files contained in the archive.
--type filename() :: string().
--type typeflag() :: regular | link | symlink |
- char | block | directory |
- fifo | reserved | unknown.
--type mode() :: non_neg_integer().
--type uid() :: non_neg_integer().
--type gid() :: non_neg_integer().
-
--type tar_entry() :: {filename(),
- typeflag(),
- non_neg_integer(),
- tar_time(),
- mode(),
- uid(),
- gid()}.
-
-%% Returns a list of names of the files in the tar file Name.
--spec table(open_handle()) -> {ok, [string()]} | {error, term()}.
-table(Name) ->
- table(Name, []).
-
-%% Returns a list of names of the files in the tar file Name.
-%% Options accepted: compressed, verbose, cooked.
--spec table(open_handle(), [compressed | verbose | cooked]) ->
- {ok, [tar_entry()]} | {error, term()}.
-table(Name, Opts) when is_list(Opts) ->
- foldl_read(Name, fun table1/4, [], table_opts(Opts)).
-
-table1(eof, Reader, _, Result) ->
- {ok, {ok, lists:reverse(Result)}, Reader};
-table1(#tar_header{}=Header, Reader, #read_opts{verbose=Verbose}, Result) ->
- Attrs = table1_attrs(Header, Verbose),
- Reader2 = skip_file(Reader),
- {ok, [Attrs|Result], Reader2}.
-
-%% Extracts attributes relevant to table1's output
-table1_attrs(#tar_header{typeflag=Typeflag,mode=Mode}=Header, true) ->
- Type = typeflag(Typeflag),
- Name = Header#tar_header.name,
- Mtime = Header#tar_header.mtime,
- Uid = Header#tar_header.uid,
- Gid = Header#tar_header.gid,
- Size = Header#tar_header.size,
- {Name, Type, Size, Mtime, Mode, Uid, Gid};
-table1_attrs(#tar_header{name=Name}, _Verbose) ->
- Name.
-
-typeflag(?TYPE_REGULAR) -> regular;
-typeflag(?TYPE_REGULAR_A) -> regular;
-typeflag(?TYPE_GNU_SPARSE) -> regular;
-typeflag(?TYPE_CONT) -> regular;
-typeflag(?TYPE_LINK) -> link;
-typeflag(?TYPE_SYMLINK) -> symlink;
-typeflag(?TYPE_CHAR) -> char;
-typeflag(?TYPE_BLOCK) -> block;
-typeflag(?TYPE_DIR) -> directory;
-typeflag(?TYPE_FIFO) -> fifo;
-typeflag(_) -> unknown.
-
-%%%================================================================
-%% Comments for printing the contents of a tape archive,
-%% meant to be invoked from the shell.
-
-%% Prints each filename in the archive
--spec t(file:filename()) -> ok | {error, term()}.
-t(Name) when is_list(Name); is_binary(Name) ->
- case table(Name) of
- {ok, List} ->
- lists:foreach(fun(N) -> ok = io:format("~ts\n", [N]) end, List);
- Error ->
- Error
- end.
-
-%% Prints verbose information about each file in the archive
--spec tt(open_handle()) -> ok | {error, term()}.
-tt(Name) ->
- case table(Name, [verbose]) of
- {ok, List} ->
- lists:foreach(fun print_header/1, List);
- Error ->
- Error
- end.
-
-%% Used by tt/1 to print a tar_entry tuple
--spec print_header(tar_entry()) -> ok.
-print_header({Name, Type, Size, Mtime, Mode, Uid, Gid}) ->
- io:format("~s~s ~4w/~-4w ~7w ~s ~s\n",
- [type_to_string(Type), mode_to_string(Mode),
- Uid, Gid, Size, time_to_string(Mtime), Name]).
-
-type_to_string(regular) -> "-";
-type_to_string(directory) -> "d";
-type_to_string(link) -> "l";
-type_to_string(symlink) -> "s";
-type_to_string(char) -> "c";
-type_to_string(block) -> "b";
-type_to_string(fifo) -> "f";
-type_to_string(unknown) -> "?".
-
-%% Converts a numeric mode to its human-readable representation
-mode_to_string(Mode) ->
- mode_to_string(Mode, "xwrxwrxwr", []).
-mode_to_string(Mode, [C|T], Acc) when Mode band 1 =:= 1 ->
- mode_to_string(Mode bsr 1, T, [C|Acc]);
-mode_to_string(Mode, [_|T], Acc) ->
- mode_to_string(Mode bsr 1, T, [$-|Acc]);
-mode_to_string(_, [], Acc) ->
- Acc.
-
-%% Converts a tar_time() (POSIX time) to a readable string
-time_to_string(Secs0) ->
- Epoch = calendar:datetime_to_gregorian_seconds(?EPOCH),
- Secs = Epoch + Secs0,
- DateTime0 = calendar:gregorian_seconds_to_datetime(Secs),
- DateTime = calendar:universal_time_to_local_time(DateTime0),
- {{Y, Mon, Day}, {H, Min, _}} = DateTime,
- io_lib:format("~s ~2w ~s:~s ~w", [month(Mon), Day, two_d(H), two_d(Min), Y]).
-
-two_d(N) ->
- tl(integer_to_list(N + 100)).
-
-month(1) -> "Jan";
-month(2) -> "Feb";
-month(3) -> "Mar";
-month(4) -> "Apr";
-month(5) -> "May";
-month(6) -> "Jun";
-month(7) -> "Jul";
-month(8) -> "Aug";
-month(9) -> "Sep";
-month(10) -> "Oct";
-month(11) -> "Nov";
-month(12) -> "Dec".
-
-%%%================================================================
-%% The open function with friends is to keep the file and binary api of this module
--type open_handle() :: file:filename()
- | {binary, binary()}
- | {file, term()}.
--spec open(open_handle(), [write | compressed | cooked]) ->
- {ok, reader()} | {error, term()}.
-open({binary, Bin}, Mode) when is_binary(Bin) ->
- do_open({binary, Bin}, Mode);
-open({file, Fd}, Mode) ->
- do_open({file, Fd}, Mode);
-open(Name, Mode) when is_list(Name); is_binary(Name) ->
- do_open(Name, Mode).
-
-do_open(Name, Mode) when is_list(Mode) ->
- case open_mode(Mode) of
- {ok, Access, Raw, Opts} ->
- open1(Name, Access, Raw, Opts);
- {error, Reason} ->
- {error, {Name, Reason}}
- end.
-
-open1({binary,Bin0}, read, _Raw, Opts) when is_binary(Bin0) ->
- Bin = case lists:member(compressed, Opts) of
- true ->
- try
- zlib:gunzip(Bin0)
- catch
- _:_ -> Bin0
- end;
- false ->
- Bin0
- end,
- case file:open(Bin, [ram,binary,read]) of
- {ok,File} ->
- {ok, #reader{handle=File,access=read,func=fun file_op/2}};
- Error ->
- Error
- end;
-open1({file, Fd}, read, _Raw, _Opts) ->
- Reader = #reader{handle=Fd,access=read,func=fun file_op/2},
- case do_position(Reader, {cur, 0}) of
- {ok, Pos, Reader2} ->
- {ok, Reader2#reader{pos=Pos}};
- {error, _} = Err ->
- Err
- end;
-open1(Name, Access, Raw, Opts) when is_list(Name) or is_binary(Name) ->
- case file:open(Name, Raw ++ [binary, Access|Opts]) of
- {ok, File} ->
- {ok, #reader{handle=File,access=Access,func=fun file_op/2}};
- {error, Reason} ->
- {error, {Name, Reason}}
- end.
-
-open_mode(Mode) ->
- open_mode(Mode, false, [raw], []).
-
-open_mode(read, _, Raw, _) ->
- {ok, read, Raw, []};
-open_mode(write, _, Raw, _) ->
- {ok, write, Raw, []};
-open_mode([read|Rest], false, Raw, Opts) ->
- open_mode(Rest, read, Raw, Opts);
-open_mode([write|Rest], false, Raw, Opts) ->
- open_mode(Rest, write, Raw, Opts);
-open_mode([compressed|Rest], Access, Raw, Opts) ->
- open_mode(Rest, Access, Raw, [compressed|Opts]);
-open_mode([cooked|Rest], Access, _Raw, Opts) ->
- open_mode(Rest, Access, [], Opts);
-open_mode([], Access, Raw, Opts) ->
- {ok, Access, Raw, Opts};
-open_mode(_, _, _, _) ->
- {error, einval}.
-
-file_op(write, {Fd, Data}) ->
- file:write(Fd, Data);
-file_op(position, {Fd, Pos}) ->
- file:position(Fd, Pos);
-file_op(read2, {Fd, Size}) ->
- file:read(Fd, Size);
-file_op(close, Fd) ->
- file:close(Fd).
-
-%% Closes a tar archive.
--spec close(reader()) -> ok | {error, term()}.
-close(#reader{access=read}=Reader) ->
- ok = do_close(Reader);
-close(#reader{access=write}=Reader) ->
- {ok, Reader2} = pad_file(Reader),
- ok = do_close(Reader2),
- ok;
-close(_) ->
- {error, einval}.
-
-pad_file(#reader{pos=Pos}=Reader) ->
- %% There must be at least two zero blocks at the end.
- PadCurrent = skip_padding(Pos+?BLOCK_SIZE),
- Padding = <<0:PadCurrent/unit:8>>,
- do_write(Reader, [Padding, ?ZERO_BLOCK, ?ZERO_BLOCK]).
-
-
-%%%================================================================
-%% Creation/modification of tar archives
-
-%% Creates a tar file Name containing the given files.
--spec create(file:filename(), filelist()) -> ok | {error, {string(), term()}}.
-create(Name, FileList) when is_list(Name); is_binary(Name) ->
- create(Name, FileList, []).
-
-%% Creates a tar archive Name containing the given files.
-%% Accepted options: verbose, compressed, cooked
--spec create(file:filename(), filelist(), [create_opt()]) ->
- ok | {error, term()} | {error, {string(), term()}}.
-create(Name, FileList, Options) when is_list(Name); is_binary(Name) ->
- Mode = lists:filter(fun(X) -> (X=:=compressed) or (X=:=cooked)
- end, Options),
- case open(Name, [write|Mode]) of
- {ok, TarFile} ->
- do_create(TarFile, FileList, Options);
- {error, _} = Err ->
- Err
- end.
-
-do_create(TarFile, [], _Opts) ->
- close(TarFile);
-do_create(TarFile, [{NameInArchive, NameOrBin}|Rest], Opts) ->
- case add(TarFile, NameOrBin, NameInArchive, Opts) of
- ok ->
- do_create(TarFile, Rest, Opts);
- {error, _} = Err ->
- _ = close(TarFile),
- Err
- end;
-do_create(TarFile, [Name|Rest], Opts) ->
- case add(TarFile, Name, Name, Opts) of
- ok ->
- do_create(TarFile, Rest, Opts);
- {error, _} = Err ->
- _ = close(TarFile),
- Err
- end.
-
-%% Adds a file to a tape archive.
--type add_type() :: string()
- | {string(), string()}
- | {string(), binary()}.
--spec add(reader(), add_type(), [add_opt()]) -> ok | {error, term()}.
-add(Reader, {NameInArchive, Name}, Opts)
- when is_list(NameInArchive), is_list(Name) ->
- do_add(Reader, Name, NameInArchive, undefined, Opts);
-add(Reader, {NameInArchive, Bin}, Opts)
- when is_list(NameInArchive), is_binary(Bin) ->
- do_add(Reader, Bin, NameInArchive, undefined, Opts);
-add(Reader, {NameInArchive, Bin, Mode}, Opts)
- when is_list(NameInArchive), is_binary(Bin), is_integer(Mode) ->
- do_add(Reader, Bin, NameInArchive, Mode, Opts);
-add(Reader, Name, Opts) when is_list(Name) ->
- do_add(Reader, Name, Name, undefined, Opts).
-
-
--spec add(reader(), string() | binary(), string(), [add_opt()]) ->
- ok | {error, term()}.
-add(Reader, NameOrBin, NameInArchive, Options)
- when is_list(NameOrBin); is_binary(NameOrBin),
- is_list(NameInArchive), is_list(Options) ->
- do_add(Reader, NameOrBin, NameInArchive, undefined, Options).
-
--spec add(reader(), string() | binary(), string(), integer(), [add_opt()]) ->
- ok | {error, term()}.
-add(Reader, NameOrBin, NameInArchive, Mode, Options)
- when is_list(NameOrBin); is_binary(NameOrBin),
- is_list(NameInArchive), is_integer(Mode), is_list(Options) ->
- do_add(Reader, NameOrBin, NameInArchive, Mode, Options).
-
-do_add(#reader{access=write}=Reader, Name, NameInArchive, Mode, Options)
- when is_list(NameInArchive), is_list(Options) ->
- RF = fun(F) -> apply_file_info_opts(Options, file:read_link_info(F, [{time, posix}])) end,
- Opts = #add_opts{read_info=RF},
- add1(Reader, Name, NameInArchive, Mode, add_opts(Options, Options, Opts));
-do_add(#reader{access=read},_,_,_,_) ->
- {error, eacces};
-do_add(Reader,_,_,_,_) ->
- {error, {badarg, Reader}}.
-
-add_opts([dereference|T], AllOptions, Opts) ->
- RF = fun(F) -> apply_file_info_opts(AllOptions, file:read_file_info(F, [{time, posix}])) end,
- add_opts(T, AllOptions, Opts#add_opts{read_info=RF});
-add_opts([verbose|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{verbose=true});
-add_opts([{chunks,N}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{chunk_size=N});
-add_opts([{atime,Value}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{atime=Value});
-add_opts([{mtime,Value}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{mtime=Value});
-add_opts([{ctime,Value}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{ctime=Value});
-add_opts([{uid,Value}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{uid=Value});
-add_opts([{gid,Value}|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts#add_opts{gid=Value});
-add_opts([_|T], AllOptions, Opts) ->
- add_opts(T, AllOptions, Opts);
-add_opts([], _AllOptions, Opts) ->
- Opts.
-
-apply_file_info_opts(Opts, {ok, FileInfo}) ->
- {ok, do_apply_file_info_opts(Opts, FileInfo)};
-apply_file_info_opts(_Opts, Other) ->
- Other.
-
-do_apply_file_info_opts([{atime,Value}|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo#file_info{atime=Value});
-do_apply_file_info_opts([{mtime,Value}|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo#file_info{mtime=Value});
-do_apply_file_info_opts([{ctime,Value}|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo#file_info{ctime=Value});
-do_apply_file_info_opts([{uid,Value}|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo#file_info{uid=Value});
-do_apply_file_info_opts([{gid,Value}|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo#file_info{gid=Value});
-do_apply_file_info_opts([_|T], FileInfo) ->
- do_apply_file_info_opts(T, FileInfo);
-do_apply_file_info_opts([], FileInfo) ->
- FileInfo.
-
-add1(#reader{}=Reader, Name, NameInArchive, undefined, #add_opts{read_info=ReadInfo}=Opts)
- when is_list(Name) ->
- Res = case ReadInfo(Name) of
- {error, Reason0} ->
- {error, {Name, Reason0}};
- {ok, #file_info{type=symlink}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- {ok, Linkname} = file:read_link(Name),
- Header = fileinfo_to_header(NameInArchive, Fi, Linkname),
- add_header(Reader, Header, Opts);
- {ok, #file_info{type=regular}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Header = fileinfo_to_header(NameInArchive, Fi, false),
- {ok, Reader2} = add_header(Reader, Header, Opts),
- FileSize = Header#tar_header.size,
- {ok, FileSize, Reader3} = do_copy(Reader2, Name, Opts),
- Padding = skip_padding(FileSize),
- Pad = <<0:Padding/unit:8>>,
- do_write(Reader3, Pad);
- {ok, #file_info{type=directory}=Fi} ->
- add_directory(Reader, Name, NameInArchive, Fi, Opts);
- {ok, #file_info{}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Header = fileinfo_to_header(NameInArchive, Fi, false),
- add_header(Reader, Header, Opts)
- end,
- case Res of
- ok -> ok;
- {ok, _Reader} -> ok;
- {error, _Reason} = Err -> Err
- end;
-add1(Reader, Bin, NameInArchive, Mode, Opts) when is_binary(Bin) ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Now = 0,
- Header = #tar_header{
- name = NameInArchive,
- size = byte_size(Bin),
- typeflag = ?TYPE_REGULAR,
- atime = add_opts_time(Opts#add_opts.atime, Now),
- mtime = add_opts_time(Opts#add_opts.mtime, Now),
- ctime = add_opts_time(Opts#add_opts.ctime, Now),
- uid = Opts#add_opts.uid,
- gid = Opts#add_opts.gid,
- mode = default_mode(Mode, 8#100644)},
- {ok, Reader2} = add_header(Reader, Header, Opts),
- Padding = skip_padding(byte_size(Bin)),
- Data = [Bin, <<0:Padding/unit:8>>],
- case do_write(Reader2, Data) of
- {ok, _Reader3} -> ok;
- {error, Reason} -> {error, {NameInArchive, Reason}}
- end.
-
-add_opts_time(undefined, _Now) -> 0;
-add_opts_time(Time, _Now) -> Time.
-
-default_mode(undefined, Mode) -> Mode;
-default_mode(Mode, _) -> Mode.
-
-add_directory(Reader, DirName, NameInArchive, Info, Opts) ->
- case file:list_dir(DirName) of
- {ok, []} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Header = fileinfo_to_header(NameInArchive, Info, false),
- add_header(Reader, Header, Opts);
- {ok, Files} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- try add_files(Reader, Files, DirName, NameInArchive, Opts) of
- ok -> ok;
- {error, _} = Err -> Err
- catch
- throw:{error, {_Name, _Reason}} = Err -> Err;
- throw:{error, Reason} -> {error, {DirName, Reason}}
- end;
- {error, Reason} ->
- {error, {DirName, Reason}}
- end.
-
-add_files(_Reader, [], _Dir, _DirInArchive, _Opts) ->
- ok;
-add_files(Reader, [Name|Rest], Dir, DirInArchive, #add_opts{read_info=Info}=Opts) ->
- FullName = filename:join(Dir, Name),
- NameInArchive = filename:join(DirInArchive, Name),
- Res = case Info(FullName) of
- {error, Reason} ->
- {error, {FullName, Reason}};
- {ok, #file_info{type=directory}=Fi} ->
- add_directory(Reader, FullName, NameInArchive, Fi, Opts);
- {ok, #file_info{type=symlink}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- {ok, Linkname} = file:read_link(FullName),
- Header = fileinfo_to_header(NameInArchive, Fi, Linkname),
- add_header(Reader, Header, Opts);
- {ok, #file_info{type=regular}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Header = fileinfo_to_header(NameInArchive, Fi, false),
- {ok, Reader2} = add_header(Reader, Header, Opts),
- FileSize = Header#tar_header.size,
- {ok, FileSize, Reader3} = do_copy(Reader2, FullName, Opts),
- Padding = skip_padding(FileSize),
- Pad = <<0:Padding/unit:8>>,
- do_write(Reader3, Pad);
- {ok, #file_info{}=Fi} ->
- add_verbose(Opts, "a ~ts~n", [NameInArchive]),
- Header = fileinfo_to_header(NameInArchive, Fi, false),
- add_header(Reader, Header, Opts)
- end,
- case Res of
- ok -> add_files(Reader, Rest, Dir, DirInArchive, Opts);
- {ok, ReaderNext} -> add_files(ReaderNext, Rest, Dir, DirInArchive, Opts);
- {error, _} = Err -> Err
- end.
-
-format_string(String, Size) when length(String) > Size ->
- throw({error, {write_string, field_too_long}});
-format_string(String, Size) ->
- Ascii = to_ascii(String),
- if byte_size(Ascii) < Size ->
- [Ascii, 0];
- true ->
- Ascii
- end.
-
-format_octal(Octal) ->
- iolist_to_binary(io_lib:fwrite("~.8B", [Octal])).
-
-add_header(#reader{}=Reader, #tar_header{}=Header, Opts) ->
- {ok, Iodata} = build_header(Header, Opts),
- do_write(Reader, Iodata).
-
-write_to_block(Block, IoData, Start) when is_list(IoData) ->
- write_to_block(Block, iolist_to_binary(IoData), Start);
-write_to_block(Block, Bin, Start) when is_binary(Bin) ->
- Size = byte_size(Bin),
- <<Head:Start/unit:8, _:Size/unit:8, Rest/binary>> = Block,
- <<Head:Start/unit:8, Bin/binary, Rest/binary>>.
-
-build_header(#tar_header{}=Header, Opts) ->
- #tar_header{
- name=Name,
- mode=Mode,
- uid=Uid,
- gid=Gid,
- size=Size,
- typeflag=Type,
- linkname=Linkname,
- uname=Uname,
- gname=Gname,
- devmajor=Devmaj,
- devminor=Devmin
- } = Header,
- Mtime = Header#tar_header.mtime,
-
- Block0 = ?ZERO_BLOCK,
- {Block1, Pax0} = write_string(Block0, ?V7_NAME, ?V7_NAME_LEN, Name, ?PAX_PATH, #{}),
- Block2 = write_octal(Block1, ?V7_MODE, ?V7_MODE_LEN, Mode),
- {Block3, Pax1} = write_numeric(Block2, ?V7_UID, ?V7_UID_LEN, Uid, ?PAX_UID, Pax0),
- {Block4, Pax2} = write_numeric(Block3, ?V7_GID, ?V7_GID_LEN, Gid, ?PAX_GID, Pax1),
- {Block5, Pax3} = write_numeric(Block4, ?V7_SIZE, ?V7_SIZE_LEN, Size, ?PAX_SIZE, Pax2),
- {Block6, Pax4} = write_numeric(Block5, ?V7_MTIME, ?V7_MTIME_LEN, Mtime, ?PAX_NONE, Pax3),
- {Block7, Pax5} = write_string(Block6, ?V7_TYPE, ?V7_TYPE_LEN, <<Type>>, ?PAX_NONE, Pax4),
- {Block8, Pax6} = write_string(Block7, ?V7_LINKNAME, ?V7_LINKNAME_LEN,
- Linkname, ?PAX_LINKPATH, Pax5),
- {Block9, Pax7} = write_string(Block8, ?USTAR_UNAME, ?USTAR_UNAME_LEN,
- Uname, ?PAX_UNAME, Pax6),
- {Block10, Pax8} = write_string(Block9, ?USTAR_GNAME, ?USTAR_GNAME_LEN,
- Gname, ?PAX_GNAME, Pax7),
- {Block11, Pax9} = write_numeric(Block10, ?USTAR_DEVMAJ, ?USTAR_DEVMAJ_LEN,
- Devmaj, ?PAX_NONE, Pax8),
- {Block12, Pax10} = write_numeric(Block11, ?USTAR_DEVMIN, ?USTAR_DEVMIN_LEN,
- Devmin, ?PAX_NONE, Pax9),
- {Block13, Pax11} = set_path(Block12, Pax10),
- PaxEntry = case maps:size(Pax11) of
- 0 -> [];
- _ -> build_pax_entry(Header, Pax11, Opts)
- end,
- Block14 = set_format(Block13, ?FORMAT_USTAR),
- Block15 = set_checksum(Block14),
- {ok, [PaxEntry, Block15]}.
-
-set_path(Block0, Pax) ->
- %% only use ustar header when name is too long
- case maps:get(?PAX_PATH, Pax, nil) of
- nil ->
- {Block0, Pax};
- PaxPath ->
- case split_ustar_path(PaxPath) of
- {ok, UstarName, UstarPrefix} ->
- {Block1, _} = write_string(Block0, ?V7_NAME, ?V7_NAME_LEN,
- UstarName, ?PAX_NONE, #{}),
- {Block2, _} = write_string(Block1, ?USTAR_PREFIX, ?USTAR_PREFIX_LEN,
- UstarPrefix, ?PAX_NONE, #{}),
- {Block2, maps:remove(?PAX_PATH, Pax)};
- false ->
- {Block0, Pax}
- end
- end.
-
-set_format(Block0, Format)
- when Format =:= ?FORMAT_USTAR; Format =:= ?FORMAT_PAX ->
- Block1 = write_to_block(Block0, ?MAGIC_USTAR, ?USTAR_MAGIC),
- write_to_block(Block1, ?VERSION_USTAR, ?USTAR_VERSION);
-set_format(_Block, Format) ->
- throw({error, {invalid_format, Format}}).
-
-set_checksum(Block) ->
- Checksum = compute_checksum(Block),
- write_octal(Block, ?V7_CHKSUM, ?V7_CHKSUM_LEN, Checksum).
-
-build_pax_entry(Header, PaxAttrs, Opts) ->
- Path = Header#tar_header.name,
- Filename = filename:basename(Path),
- Dir = filename:dirname(Path),
- Path2 = filename:join([Dir, "PaxHeaders.0", Filename]),
- AsciiPath = to_ascii(Path2),
- Path3 = if byte_size(AsciiPath) > ?V7_NAME_LEN ->
- binary_part(AsciiPath, 0, ?V7_NAME_LEN - 1);
- true ->
- AsciiPath
- end,
- Keys = maps:keys(PaxAttrs),
- SortedKeys = lists:sort(Keys),
- PaxFile = build_pax_file(SortedKeys, PaxAttrs),
- Size = byte_size(PaxFile),
- Padding = (?BLOCK_SIZE -
- (byte_size(PaxFile) rem ?BLOCK_SIZE)) rem ?BLOCK_SIZE,
- Pad = <<0:Padding/unit:8>>,
- PaxHeader = #tar_header{
- name=unicode:characters_to_list(Path3),
- size=Size,
- mtime=Header#tar_header.mtime,
- atime=Header#tar_header.atime,
- ctime=Header#tar_header.ctime,
- typeflag=?TYPE_X_HEADER
- },
- {ok, PaxHeaderData} = build_header(PaxHeader, Opts),
- [PaxHeaderData, PaxFile, Pad].
-
-build_pax_file(Keys, PaxAttrs) ->
- build_pax_file(Keys, PaxAttrs, []).
-build_pax_file([], _, Acc) ->
- unicode:characters_to_binary(Acc);
-build_pax_file([K|Rest], Attrs, Acc) ->
- V = maps:get(K, Attrs),
- Size = sizeof(K) + sizeof(V) + 3,
- Size2 = sizeof(Size) + Size,
- Key = to_string(K),
- Value = to_string(V),
- Record = unicode:characters_to_binary(io_lib:format("~B ~ts=~ts\n", [Size2, Key, Value])),
- if byte_size(Record) =/= Size2 ->
- Size3 = byte_size(Record),
- Record2 = io_lib:format("~B ~ts=~ts\n", [Size3, Key, Value]),
- build_pax_file(Rest, Attrs, [Acc, Record2]);
- true ->
- build_pax_file(Rest, Attrs, [Acc, Record])
- end.
-
-sizeof(Bin) when is_binary(Bin) ->
- byte_size(Bin);
-sizeof(List) when is_list(List) ->
- length(List);
-sizeof(N) when is_integer(N) ->
- byte_size(integer_to_binary(N));
-sizeof(N) when is_float(N) ->
- byte_size(float_to_binary(N)).
-
-to_string(Bin) when is_binary(Bin) ->
- unicode:characters_to_list(Bin);
-to_string(List) when is_list(List) ->
- List;
-to_string(N) when is_integer(N) ->
- integer_to_list(N);
-to_string(N) when is_float(N) ->
- float_to_list(N).
-
-split_ustar_path(Path) ->
- Len = length(Path),
- NotAscii = not is_ascii(Path),
- if Len =< ?V7_NAME_LEN; NotAscii ->
- false;
- true ->
- PathBin = binary:list_to_bin(Path),
- case binary:split(PathBin, [<<$/>>], [global, trim_all]) of
- [Part] when byte_size(Part) >= ?V7_NAME_LEN ->
- false;
- Parts ->
- case lists:last(Parts) of
- Name when byte_size(Name) >= ?V7_NAME_LEN ->
- false;
- Name ->
- Parts2 = lists:sublist(Parts, length(Parts) - 1),
- join_split_ustar_path(Parts2, {ok, Name, nil})
- end
- end
- end.
-
-join_split_ustar_path([], Acc) ->
- Acc;
-join_split_ustar_path([Part|_], {ok, _, nil})
- when byte_size(Part) > ?USTAR_PREFIX_LEN ->
- false;
-join_split_ustar_path([Part|_], {ok, _Name, Acc})
- when (byte_size(Part)+byte_size(Acc)) > ?USTAR_PREFIX_LEN ->
- false;
-join_split_ustar_path([Part|Rest], {ok, Name, nil}) ->
- join_split_ustar_path(Rest, {ok, Name, Part});
-join_split_ustar_path([Part|Rest], {ok, Name, Acc}) ->
- join_split_ustar_path(Rest, {ok, Name, <<Acc/binary,$/,Part/binary>>}).
-
-write_octal(Block, Pos, Size, X) ->
- Octal = zero_pad(format_octal(X), Size-1),
- if byte_size(Octal) < Size ->
- write_to_block(Block, Octal, Pos);
- true ->
- throw({error, {write_failed, octal_field_too_long}})
- end.
-
-write_string(Block, Pos, Size, Str, PaxAttr, Pax0) ->
- NotAscii = not is_ascii(Str),
- if PaxAttr =/= ?PAX_NONE andalso (length(Str) > Size orelse NotAscii) ->
- Pax1 = maps:put(PaxAttr, Str, Pax0),
- {Block, Pax1};
- true ->
- Formatted = format_string(Str, Size),
- {write_to_block(Block, Formatted, Pos), Pax0}
- end.
-write_numeric(Block, Pos, Size, X, PaxAttr, Pax0) ->
- %% attempt octal
- Octal = zero_pad(format_octal(X), Size-1),
- if byte_size(Octal) < Size ->
- {write_to_block(Block, [Octal, 0], Pos), Pax0};
- PaxAttr =/= ?PAX_NONE ->
- Pax1 = maps:put(PaxAttr, X, Pax0),
- {Block, Pax1};
- true ->
- throw({error, {write_failed, numeric_field_too_long}})
- end.
-
-zero_pad(Str, Size) when byte_size(Str) >= Size ->
- Str;
-zero_pad(Str, Size) ->
- Padding = Size - byte_size(Str),
- Pad = binary:copy(<<$0>>, Padding),
- <<Pad/binary, Str/binary>>.
-
-
-%%%================================================================
-%% Functions for creating or modifying tar archives
-
-read_block(Reader) ->
- case do_read(Reader, ?BLOCK_SIZE) of
- eof ->
- throw({error, eof});
- %% Two zero blocks mark the end of the archive
- {ok, ?ZERO_BLOCK, Reader1} ->
- case do_read(Reader1, ?BLOCK_SIZE) of
- eof ->
- % This is technically a malformed end-of-archive marker,
- % as two ZERO_BLOCKs are expected as the marker,
- % but if we've already made it this far, we should just ignore it
- eof;
- {ok, ?ZERO_BLOCK, _Reader2} ->
- eof;
- {ok, _Block, _Reader2} ->
- throw({error, invalid_end_of_archive});
- {error,_} = Err ->
- throw(Err)
- end;
- {ok, Block, Reader1} when is_binary(Block) ->
- {ok, Block, Reader1};
- {error, _} = Err ->
- throw(Err)
- end.
-
-get_header(#reader{}=Reader) ->
- case read_block(Reader) of
- eof ->
- eof;
- {ok, Block, Reader1} ->
- convert_header(Block, Reader1)
- end.
-
-%% Converts the tar header to a record.
-to_v7(Bin) when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- #header_v7{
- name=binary_part(Bin, ?V7_NAME, ?V7_NAME_LEN),
- mode=binary_part(Bin, ?V7_MODE, ?V7_MODE_LEN),
- uid=binary_part(Bin, ?V7_UID, ?V7_UID_LEN),
- gid=binary_part(Bin, ?V7_GID, ?V7_GID_LEN),
- size=binary_part(Bin, ?V7_SIZE, ?V7_SIZE_LEN),
- mtime=binary_part(Bin, ?V7_MTIME, ?V7_MTIME_LEN),
- checksum=binary_part(Bin, ?V7_CHKSUM, ?V7_CHKSUM_LEN),
- typeflag=binary:at(Bin, ?V7_TYPE),
- linkname=binary_part(Bin, ?V7_LINKNAME, ?V7_LINKNAME_LEN)
- };
-to_v7(_) ->
- {error, header_block_too_small}.
-
-to_gnu(#header_v7{}=V7, Bin)
- when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- #header_gnu{
- header_v7=V7,
- magic=binary_part(Bin, ?GNU_MAGIC, ?GNU_MAGIC_LEN),
- version=binary_part(Bin, ?GNU_VERSION, ?GNU_VERSION_LEN),
- uname=binary_part(Bin, 265, 32),
- gname=binary_part(Bin, 297, 32),
- devmajor=binary_part(Bin, 329, 8),
- devminor=binary_part(Bin, 337, 8),
- atime=binary_part(Bin, 345, 12),
- ctime=binary_part(Bin, 357, 12),
- sparse=to_sparse_array(binary_part(Bin, 386, 24*4+1)),
- real_size=binary_part(Bin, 483, 12)
- }.
-
-to_star(#header_v7{}=V7, Bin)
- when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- #header_star{
- header_v7=V7,
- magic=binary_part(Bin, ?USTAR_MAGIC, ?USTAR_MAGIC_LEN),
- version=binary_part(Bin, ?USTAR_VERSION, ?USTAR_VERSION_LEN),
- uname=binary_part(Bin, ?USTAR_UNAME, ?USTAR_UNAME_LEN),
- gname=binary_part(Bin, ?USTAR_GNAME, ?USTAR_GNAME_LEN),
- devmajor=binary_part(Bin, ?USTAR_DEVMAJ, ?USTAR_DEVMAJ_LEN),
- devminor=binary_part(Bin, ?USTAR_DEVMIN, ?USTAR_DEVMIN_LEN),
- prefix=binary_part(Bin, 345, 131),
- atime=binary_part(Bin, 476, 12),
- ctime=binary_part(Bin, 488, 12),
- trailer=binary_part(Bin, ?STAR_TRAILER, ?STAR_TRAILER_LEN)
- }.
-
-to_ustar(#header_v7{}=V7, Bin)
- when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- #header_ustar{
- header_v7=V7,
- magic=binary_part(Bin, ?USTAR_MAGIC, ?USTAR_MAGIC_LEN),
- version=binary_part(Bin, ?USTAR_VERSION, ?USTAR_VERSION_LEN),
- uname=binary_part(Bin, ?USTAR_UNAME, ?USTAR_UNAME_LEN),
- gname=binary_part(Bin, ?USTAR_GNAME, ?USTAR_GNAME_LEN),
- devmajor=binary_part(Bin, ?USTAR_DEVMAJ, ?USTAR_DEVMAJ_LEN),
- devminor=binary_part(Bin, ?USTAR_DEVMIN, ?USTAR_DEVMIN_LEN),
- prefix=binary_part(Bin, 345, 155)
- }.
-
-to_sparse_array(Bin) when is_binary(Bin) ->
- MaxEntries = byte_size(Bin) div 24,
- IsExtended = 1 =:= binary:at(Bin, 24*MaxEntries),
- Entries = parse_sparse_entries(Bin, MaxEntries-1, []),
- #sparse_array{
- entries=Entries,
- max_entries=MaxEntries,
- is_extended=IsExtended
- }.
-
-parse_sparse_entries(<<>>, _, Acc) ->
- Acc;
-parse_sparse_entries(_, -1, Acc) ->
- Acc;
-parse_sparse_entries(Bin, N, Acc) ->
- case to_sparse_entry(binary_part(Bin, N*24, 24)) of
- nil ->
- parse_sparse_entries(Bin, N-1, Acc);
- Entry = #sparse_entry{} ->
- parse_sparse_entries(Bin, N-1, [Entry|Acc])
- end.
-
--define(EMPTY_ENTRY, <<0,0,0,0,0,0,0,0,0,0,0,0>>).
-to_sparse_entry(Bin) when is_binary(Bin), byte_size(Bin) =:= 24 ->
- OffsetBin = binary_part(Bin, 0, 12),
- NumBytesBin = binary_part(Bin, 12, 12),
- case {OffsetBin, NumBytesBin} of
- {?EMPTY_ENTRY, ?EMPTY_ENTRY} ->
- nil;
- _ ->
- #sparse_entry{
- offset=parse_numeric(OffsetBin),
- num_bytes=parse_numeric(NumBytesBin)}
- end.
-
--spec get_format(binary()) -> {ok, pos_integer(), header_v7()}
- | ?FORMAT_UNKNOWN
- | {error, term()}.
-get_format(Bin) when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- do_get_format(to_v7(Bin), Bin).
-
-do_get_format({error, _} = Err, _Bin) ->
- Err;
-do_get_format(#header_v7{}=V7, Bin)
- when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- Checksum = parse_octal(V7#header_v7.checksum),
- Chk1 = compute_checksum(Bin),
- Chk2 = compute_signed_checksum(Bin),
- if Checksum =/= Chk1 andalso Checksum =/= Chk2 ->
- ?FORMAT_UNKNOWN;
- true ->
- %% guess magic
- Ustar = to_ustar(V7, Bin),
- Star = to_star(V7, Bin),
- Magic = Ustar#header_ustar.magic,
- Version = Ustar#header_ustar.version,
- Trailer = Star#header_star.trailer,
- Format = if
- Magic =:= ?MAGIC_USTAR, Trailer =:= ?TRAILER_STAR ->
- ?FORMAT_STAR;
- Magic =:= ?MAGIC_USTAR ->
- ?FORMAT_USTAR;
- Magic =:= ?MAGIC_GNU, Version =:= ?VERSION_GNU ->
- ?FORMAT_GNU;
- true ->
- ?FORMAT_V7
- end,
- {ok, Format, V7}
- end.
-
-unpack_format(Format, #header_v7{}=V7, Bin, Reader)
- when is_binary(Bin), byte_size(Bin) =:= ?BLOCK_SIZE ->
- Mtime = parse_numeric(V7#header_v7.mtime),
- Header0 = #tar_header{
- name=parse_string(V7#header_v7.name),
- mode=parse_numeric(V7#header_v7.mode),
- uid=parse_numeric(V7#header_v7.uid),
- gid=parse_numeric(V7#header_v7.gid),
- size=parse_numeric(V7#header_v7.size),
- mtime=Mtime,
- atime=Mtime,
- ctime=Mtime,
- typeflag=V7#header_v7.typeflag,
- linkname=parse_string(V7#header_v7.linkname)
- },
- Typeflag = Header0#tar_header.typeflag,
- Header1 = if Format > ?FORMAT_V7 ->
- unpack_modern(Format, V7, Bin, Header0);
- true ->
- Name = Header0#tar_header.name,
- Header0#tar_header{name=safe_join_path("", Name)}
- end,
- HeaderOnly = is_header_only_type(Typeflag),
- Header2 = if HeaderOnly ->
- Header1#tar_header{size=0};
- true ->
- Header1
- end,
- if Typeflag =:= ?TYPE_GNU_SPARSE ->
- Gnu = to_gnu(V7, Bin),
- RealSize = parse_numeric(Gnu#header_gnu.real_size),
- {Sparsemap, Reader2} = parse_sparse_map(Gnu, Reader),
- Header3 = Header2#tar_header{size=RealSize},
- {Header3, new_sparse_file_reader(Reader2, Sparsemap, RealSize)};
- true ->
- FileReader = #reg_file_reader{
- handle=Reader,
- num_bytes=Header2#tar_header.size,
- size=Header2#tar_header.size,
- pos = 0
- },
- {Header2, FileReader}
- end.
-
-unpack_modern(Format, #header_v7{}=V7, Bin, #tar_header{}=Header0)
- when is_binary(Bin) ->
- Typeflag = Header0#tar_header.typeflag,
- Ustar = to_ustar(V7, Bin),
- H0 = Header0#tar_header{
- uname=parse_string(Ustar#header_ustar.uname),
- gname=parse_string(Ustar#header_ustar.gname)},
- H1 = if Typeflag =:= ?TYPE_CHAR
- orelse Typeflag =:= ?TYPE_BLOCK ->
- Ma = parse_numeric(Ustar#header_ustar.devmajor),
- Mi = parse_numeric(Ustar#header_ustar.devminor),
- H0#tar_header{
- devmajor=Ma,
- devminor=Mi
- };
- true ->
- H0
- end,
- {Prefix, H2} = case Format of
- ?FORMAT_USTAR ->
- {parse_string(Ustar#header_ustar.prefix), H1};
- ?FORMAT_STAR ->
- Star = to_star(V7, Bin),
- Prefix0 = parse_string(Star#header_star.prefix),
- Atime0 = Star#header_star.atime,
- Atime = parse_numeric(Atime0),
- Ctime0 = Star#header_star.ctime,
- Ctime = parse_numeric(Ctime0),
- {Prefix0, H1#tar_header{
- atime=Atime,
- ctime=Ctime
- }};
- _ ->
- {"", H1}
- end,
- Name = H2#tar_header.name,
- H2#tar_header{name=safe_join_path(Prefix, Name)}.
-
-
-safe_join_path([], Name) ->
- filename:join([Name]);
-safe_join_path(Prefix, []) ->
- filename:join([Prefix]);
-safe_join_path(Prefix, Name) ->
- filename:join(Prefix, Name).
-
-new_sparse_file_reader(Reader, Sparsemap, RealSize) ->
- true = validate_sparse_entries(Sparsemap, RealSize),
- #sparse_file_reader{
- handle = Reader,
- num_bytes = RealSize,
- pos = 0,
- size = RealSize,
- sparse_map = Sparsemap}.
-
-validate_sparse_entries(Entries, RealSize) ->
- validate_sparse_entries(Entries, RealSize, 0, 0).
-validate_sparse_entries([], _RealSize, _I, _LastOffset) ->
- true;
-validate_sparse_entries([#sparse_entry{}=Entry|Rest], RealSize, I, LastOffset) ->
- Offset = Entry#sparse_entry.offset,
- NumBytes = Entry#sparse_entry.num_bytes,
- if
- Offset > ?MAX_INT64-NumBytes ->
- throw({error, {invalid_sparse_map_entry, offset_too_large}});
- Offset+NumBytes > RealSize ->
- throw({error, {invalid_sparse_map_entry, offset_too_large}});
- I > 0 andalso LastOffset > Offset ->
- throw({error, {invalid_sparse_map_entry, overlapping_offsets}});
- true ->
- ok
- end,
- validate_sparse_entries(Rest, RealSize, I+1, Offset+NumBytes).
-
-
--spec parse_sparse_map(header_gnu(), reader_type()) ->
- {[sparse_entry()], reader_type()}.
-parse_sparse_map(#header_gnu{sparse=Sparse}, Reader)
- when Sparse#sparse_array.is_extended ->
- parse_sparse_map(Sparse, Reader, []);
-parse_sparse_map(#header_gnu{sparse=Sparse}, Reader) ->
- {Sparse#sparse_array.entries, Reader}.
-parse_sparse_map(#sparse_array{is_extended=true,entries=Entries}, Reader, Acc) ->
- case read_block(Reader) of
- eof ->
- throw({error, eof});
- {ok, Block, Reader2} ->
- Sparse2 = to_sparse_array(Block),
- parse_sparse_map(Sparse2, Reader2, Entries++Acc)
- end;
-parse_sparse_map(#sparse_array{entries=Entries}, Reader, Acc) ->
- Sorted = lists:sort(fun (#sparse_entry{offset=A},#sparse_entry{offset=B}) ->
- A =< B
- end, Entries++Acc),
- {Sorted, Reader}.
-
-%% Defined by taking the sum of the unsigned byte values of the
-%% entire header record, treating the checksum bytes to as ASCII spaces
-compute_checksum(<<H1:?V7_CHKSUM/binary,
- H2:?V7_CHKSUM_LEN/binary,
- Rest:(?BLOCK_SIZE - ?V7_CHKSUM - ?V7_CHKSUM_LEN)/binary,
- _/binary>>) ->
- C0 = checksum(H1) + (byte_size(H2) * $\s),
- C1 = checksum(Rest),
- C0 + C1.
-
-compute_signed_checksum(<<H1:?V7_CHKSUM/binary,
- H2:?V7_CHKSUM_LEN/binary,
- Rest:(?BLOCK_SIZE - ?V7_CHKSUM - ?V7_CHKSUM_LEN)/binary,
- _/binary>>) ->
- C0 = signed_checksum(H1) + (byte_size(H2) * $\s),
- C1 = signed_checksum(Rest),
- C0 + C1.
-
-%% Returns the checksum of a binary.
-checksum(Bin) -> checksum(Bin, 0).
-checksum(<<A/unsigned,Rest/binary>>, Sum) ->
- checksum(Rest, Sum+A);
-checksum(<<>>, Sum) -> Sum.
-
-signed_checksum(Bin) -> signed_checksum(Bin, 0).
-signed_checksum(<<A/signed,Rest/binary>>, Sum) ->
- signed_checksum(Rest, Sum+A);
-signed_checksum(<<>>, Sum) -> Sum.
-
--spec parse_numeric(binary()) -> non_neg_integer().
-parse_numeric(<<>>) ->
- 0;
-parse_numeric(<<First, _/binary>> = Bin) ->
- %% check for base-256 format first
- %% if the bit is set, then all following bits constitute a two's
- %% complement encoded number in big-endian byte order
- if
- First band 16#80 =/= 0 ->
- %% Handling negative numbers relies on the following identity:
- %% -a-1 == ^a
- %% If the number is negative, we use an inversion mask to invert
- %% the data bytes and treat the value as an unsigned number
- Inv = if First band 16#40 =/= 0 -> 16#00; true -> 16#FF end,
- Bytes = binary:bin_to_list(Bin),
- Reducer = fun (C, {I, X}) ->
- C1 = C bxor Inv,
- C2 = if I =:= 0 -> C1 band 16#7F; true -> C1 end,
- if (X bsr 56) > 0 ->
- throw({error,integer_overflow});
- true ->
- {I+1, (X bsl 8) bor C2}
- end
- end,
- {_, N} = lists:foldl(Reducer, {0,0}, Bytes),
- if (N bsr 63) > 0 ->
- throw({error, integer_overflow});
- true ->
- if Inv =:= 16#FF ->
- -1 bxor N;
- true ->
- N
- end
- end;
- true ->
- %% normal case is an octal number
- parse_octal(Bin)
- end.
-
-parse_octal(Bin) when is_binary(Bin) ->
- %% skip leading/trailing zero bytes and spaces
- do_parse_octal(Bin, <<>>).
-do_parse_octal(<<>>, <<>>) ->
- 0;
-do_parse_octal(<<>>, Acc) ->
- case io_lib:fread("~8u", binary:bin_to_list(Acc)) of
- {error, _} -> throw({error, invalid_tar_checksum});
- {ok, [Octal], []} -> Octal;
- {ok, _, _} -> throw({error, invalid_tar_checksum})
- end;
-do_parse_octal(<<$\s,Rest/binary>>, Acc) ->
- do_parse_octal(Rest, Acc);
-do_parse_octal(<<0, Rest/binary>>, Acc) ->
- do_parse_octal(Rest, Acc);
-do_parse_octal(<<C, Rest/binary>>, Acc) ->
- do_parse_octal(Rest, <<Acc/binary, C>>).
-
-parse_string(Bin) when is_binary(Bin) ->
- do_parse_string(Bin, <<>>).
-do_parse_string(<<>>, Acc) ->
- case unicode:characters_to_list(Acc) of
- Str when is_list(Str) ->
- Str;
- {incomplete, _Str, _Rest} ->
- binary:bin_to_list(Acc);
- {error, _Str, _Rest} ->
- throw({error, {bad_header, invalid_string}})
- end;
-do_parse_string(<<0, _/binary>>, Acc) ->
- do_parse_string(<<>>, Acc);
-do_parse_string(<<C, Rest/binary>>, Acc) ->
- do_parse_string(Rest, <<Acc/binary, C>>).
-
-convert_header(Bin, #reader{pos=Pos}=Reader)
- when byte_size(Bin) =:= ?BLOCK_SIZE, (Pos rem ?BLOCK_SIZE) =:= 0 ->
- case get_format(Bin) of
- ?FORMAT_UNKNOWN ->
- throw({error, bad_header});
- {ok, Format, V7} ->
- unpack_format(Format, V7, Bin, Reader);
- {error, Reason} ->
- throw({error, {bad_header, Reason}})
- end;
-convert_header(Bin, #reader{pos=Pos}) when byte_size(Bin) =:= ?BLOCK_SIZE ->
- throw({error, misaligned_read, Pos});
-convert_header(Bin, _Reader) when byte_size(Bin) =:= 0 ->
- eof;
-convert_header(_Bin, _Reader) ->
- throw({error, eof}).
-
-%% Creates a partially-populated header record based
-%% on the provided file_info record. If the file is
-%% a symlink, then `link` is used as the link target.
-%% If the file is a directory, a slash is appended to the name.
-fileinfo_to_header(Name, #file_info{}=Fi, Link) when is_list(Name) ->
- BaseHeader = #tar_header{name=Name,
- mtime=0,
- atime=0,
- ctime=0,
- mode=Fi#file_info.mode,
- typeflag=?TYPE_REGULAR},
- do_fileinfo_to_header(BaseHeader, Fi, Link).
-
-do_fileinfo_to_header(Header, #file_info{size=Size,type=regular}, _Link) ->
- Header#tar_header{size=Size,typeflag=?TYPE_REGULAR};
-do_fileinfo_to_header(#tar_header{name=Name}=Header,
- #file_info{type=directory}, _Link) ->
- Header#tar_header{name=Name++"/",typeflag=?TYPE_DIR};
-do_fileinfo_to_header(Header, #file_info{type=symlink}, Link) ->
- Header#tar_header{typeflag=?TYPE_SYMLINK,linkname=Link};
-do_fileinfo_to_header(Header, #file_info{type=device,mode=Mode}=Fi, _Link)
- when (Mode band ?S_IFMT) =:= ?S_IFCHR ->
- Header#tar_header{typeflag=?TYPE_CHAR,
- devmajor=Fi#file_info.major_device,
- devminor=Fi#file_info.minor_device};
-do_fileinfo_to_header(Header, #file_info{type=device,mode=Mode}=Fi, _Link)
- when (Mode band ?S_IFMT) =:= ?S_IFBLK ->
- Header#tar_header{typeflag=?TYPE_BLOCK,
- devmajor=Fi#file_info.major_device,
- devminor=Fi#file_info.minor_device};
-do_fileinfo_to_header(Header, #file_info{type=other,mode=Mode}, _Link)
- when (Mode band ?S_IFMT) =:= ?S_FIFO ->
- Header#tar_header{typeflag=?TYPE_FIFO};
-do_fileinfo_to_header(Header, Fi, _Link) ->
- {error, {invalid_file_type, Header#tar_header.name, Fi}}.
-
-is_ascii(Str) when is_list(Str) ->
- not lists:any(fun (Char) -> Char >= 16#80 end, Str);
-is_ascii(Bin) when is_binary(Bin) ->
- is_ascii1(Bin).
-
-is_ascii1(<<>>) ->
- true;
-is_ascii1(<<C,_Rest/binary>>) when C >= 16#80 ->
- false;
-is_ascii1(<<_, Rest/binary>>) ->
- is_ascii1(Rest).
-
-to_ascii(Str) when is_list(Str) ->
- case is_ascii(Str) of
- true ->
- unicode:characters_to_binary(Str);
- false ->
- Chars = lists:filter(fun (Char) -> Char < 16#80 end, Str),
- unicode:characters_to_binary(Chars)
- end;
-to_ascii(Bin) when is_binary(Bin) ->
- to_ascii(Bin, <<>>).
-to_ascii(<<>>, Acc) ->
- Acc;
-to_ascii(<<C, Rest/binary>>, Acc) when C < 16#80 ->
- to_ascii(Rest, <<Acc/binary,C>>);
-to_ascii(<<_, Rest/binary>>, Acc) ->
- to_ascii(Rest, Acc).
-
-is_header_only_type(?TYPE_SYMLINK) -> true;
-is_header_only_type(?TYPE_LINK) -> true;
-is_header_only_type(?TYPE_DIR) -> true;
-is_header_only_type(_) -> false.
-
-foldl_read(#reader{access=read}=Reader, Fun, Accu, #read_opts{}=Opts)
- when is_function(Fun,4) ->
- case foldl_read0(Reader, Fun, Accu, Opts) of
- {ok, Result, _Reader2} ->
- Result;
- {error, _} = Err ->
- Err
- end;
-foldl_read(#reader{access=Access}, _Fun, _Accu, _Opts) ->
- {error, {read_mode_expected, Access}};
-foldl_read(TarName, Fun, Accu, #read_opts{}=Opts)
- when is_function(Fun,4) ->
- try open(TarName, [read|Opts#read_opts.open_mode]) of
- {ok, #reader{access=read}=Reader} ->
- try
- foldl_read(Reader, Fun, Accu, Opts)
- after
- _ = close(Reader)
- end;
- {error, _} = Err ->
- Err
- catch
- throw:Err ->
- Err
- end.
-
-foldl_read0(Reader, Fun, Accu, Opts) ->
- try foldl_read1(Fun, Accu, Reader, Opts, #{}) of
- {ok,_,_} = Ok ->
- Ok
- catch
- throw:{error, {Reason, Format, Args}} ->
- read_verbose(Opts, Format, Args),
- {error, Reason};
- throw:Err ->
- Err
- end.
-
-foldl_read1(Fun, Accu0, Reader0, Opts, ExtraHeaders) ->
- {ok, Reader1} = skip_unread(Reader0),
- case get_header(Reader1) of
- eof ->
- Fun(eof, Reader1, Opts, Accu0);
- {Header, Reader2} ->
- case Header#tar_header.typeflag of
- ?TYPE_X_HEADER ->
- {ExtraHeaders2, Reader3} = parse_pax(Reader2),
- ExtraHeaders3 = maps:merge(ExtraHeaders, ExtraHeaders2),
- foldl_read1(Fun, Accu0, Reader3, Opts, ExtraHeaders3);
- ?TYPE_GNU_LONGNAME ->
- {RealName, Reader3} = get_real_name(Reader2),
- ExtraHeaders2 = maps:put(?PAX_PATH,
- parse_string(RealName), ExtraHeaders),
- foldl_read1(Fun, Accu0, Reader3, Opts, ExtraHeaders2);
- ?TYPE_GNU_LONGLINK ->
- {RealName, Reader3} = get_real_name(Reader2),
- ExtraHeaders2 = maps:put(?PAX_LINKPATH,
- parse_string(RealName), ExtraHeaders),
- foldl_read1(Fun, Accu0, Reader3, Opts, ExtraHeaders2);
- _ ->
- Header1 = merge_pax(Header, ExtraHeaders),
- {ok, NewAccu, Reader3} = Fun(Header1, Reader2, Opts, Accu0),
- foldl_read1(Fun, NewAccu, Reader3, Opts, #{})
- end
- end.
-
-%% Applies all known PAX attributes to the current tar header
--spec merge_pax(tar_header(), #{binary() => binary()}) -> tar_header().
-merge_pax(Header, ExtraHeaders) when is_map(ExtraHeaders) ->
- do_merge_pax(Header, maps:to_list(ExtraHeaders)).
-
-do_merge_pax(Header, []) ->
- Header;
-do_merge_pax(Header, [{?PAX_PATH, Path}|Rest]) ->
- do_merge_pax(Header#tar_header{name=unicode:characters_to_list(Path)}, Rest);
-do_merge_pax(Header, [{?PAX_LINKPATH, LinkPath}|Rest]) ->
- do_merge_pax(Header#tar_header{linkname=unicode:characters_to_list(LinkPath)}, Rest);
-do_merge_pax(Header, [{?PAX_GNAME, Gname}|Rest]) ->
- do_merge_pax(Header#tar_header{gname=unicode:characters_to_list(Gname)}, Rest);
-do_merge_pax(Header, [{?PAX_UNAME, Uname}|Rest]) ->
- do_merge_pax(Header#tar_header{uname=unicode:characters_to_list(Uname)}, Rest);
-do_merge_pax(Header, [{?PAX_UID, Uid}|Rest]) ->
- Uid2 = binary_to_integer(Uid),
- do_merge_pax(Header#tar_header{uid=Uid2}, Rest);
-do_merge_pax(Header, [{?PAX_GID, Gid}|Rest]) ->
- Gid2 = binary_to_integer(Gid),
- do_merge_pax(Header#tar_header{gid=Gid2}, Rest);
-do_merge_pax(Header, [{?PAX_ATIME, Atime}|Rest]) ->
- Atime2 = parse_pax_time(Atime),
- do_merge_pax(Header#tar_header{atime=Atime2}, Rest);
-do_merge_pax(Header, [{?PAX_MTIME, Mtime}|Rest]) ->
- Mtime2 = parse_pax_time(Mtime),
- do_merge_pax(Header#tar_header{mtime=Mtime2}, Rest);
-do_merge_pax(Header, [{?PAX_CTIME, Ctime}|Rest]) ->
- Ctime2 = parse_pax_time(Ctime),
- do_merge_pax(Header#tar_header{ctime=Ctime2}, Rest);
-do_merge_pax(Header, [{?PAX_SIZE, Size}|Rest]) ->
- Size2 = binary_to_integer(Size),
- do_merge_pax(Header#tar_header{size=Size2}, Rest);
-do_merge_pax(Header, [{<<?PAX_XATTR_STR, _Key/binary>>, _Value}|Rest]) ->
- do_merge_pax(Header, Rest);
-do_merge_pax(Header, [_Ignore|Rest]) ->
- do_merge_pax(Header, Rest).
-
-%% Returns the time since UNIX epoch as a datetime
--spec parse_pax_time(binary()) -> tar_time().
-parse_pax_time(Bin) when is_binary(Bin) ->
- TotalNano = case binary:split(Bin, [<<$.>>]) of
- [SecondsStr, NanoStr0] ->
- Seconds = binary_to_integer(SecondsStr),
- if byte_size(NanoStr0) < ?MAX_NANO_INT_SIZE ->
- %% right pad
- PaddingN = ?MAX_NANO_INT_SIZE-byte_size(NanoStr0),
- Padding = binary:copy(<<$0>>, PaddingN),
- NanoStr1 = <<NanoStr0/binary,Padding/binary>>,
- Nano = binary_to_integer(NanoStr1),
- (Seconds*?BILLION)+Nano;
- byte_size(NanoStr0) > ?MAX_NANO_INT_SIZE ->
- %% right truncate
- NanoStr1 = binary_part(NanoStr0, 0, ?MAX_NANO_INT_SIZE),
- Nano = binary_to_integer(NanoStr1),
- (Seconds*?BILLION)+Nano;
- true ->
- (Seconds*?BILLION)+binary_to_integer(NanoStr0)
- end;
- [SecondsStr] ->
- binary_to_integer(SecondsStr)*?BILLION
- end,
- %% truncate to microseconds
- Micro = TotalNano div 1000,
- Mega = Micro div 1000000000000,
- Secs = Micro div 1000000 - (Mega*1000000),
- Secs.
-
-%% Given a regular file reader, reads the whole file and
-%% parses all extended attributes it contains.
-parse_pax(#reg_file_reader{handle=Handle,num_bytes=0}) ->
- {#{}, Handle};
-parse_pax(#reg_file_reader{handle=Handle0,num_bytes=NumBytes}) ->
- case do_read(Handle0, NumBytes) of
- {ok, Bytes, Handle1} ->
- do_parse_pax(Handle1, Bytes, #{});
- {error, _} = Err ->
- throw(Err)
- end.
-
-do_parse_pax(Reader, <<>>, Headers) ->
- {Headers, Reader};
-do_parse_pax(Reader, Bin, Headers) ->
- {Key, Value, Residual} = parse_pax_record(Bin),
- NewHeaders = maps:put(Key, Value, Headers),
- do_parse_pax(Reader, Residual, NewHeaders).
-
-%% Parse an extended attribute
-parse_pax_record(Bin) when is_binary(Bin) ->
- case binary:split(Bin, [<<$\n>>]) of
- [Record, Residual] ->
- case [X || X <- binary:split(Record, [<<$\s>>], [global]), X =/= <<>>] of
- [_Len, Record1] ->
- case [X || X <- binary:split(Record1, [<<$=>>], [global]), X =/= <<>>] of
- [AttrName, AttrValue] ->
- {AttrName, AttrValue, Residual};
- _Other ->
- throw({error, malformed_pax_record})
- end;
- _Other ->
- throw({error, malformed_pax_record})
- end;
- _Other ->
- throw({error, malformed_pax_record})
- end.
-
-get_real_name(#reg_file_reader{handle=Handle,num_bytes=0}) ->
- {"", Handle};
-get_real_name(#reg_file_reader{handle=Handle0,num_bytes=NumBytes}) ->
- case do_read(Handle0, NumBytes) of
- {ok, RealName, Handle1} ->
- {RealName, Handle1};
- {error, _} = Err ->
- throw(Err)
- end;
-get_real_name(#sparse_file_reader{num_bytes=NumBytes}=Reader0) ->
- case do_read(Reader0, NumBytes) of
- {ok, RealName, Reader1} ->
- {RealName, Reader1};
- {error, _} = Err ->
- throw(Err)
- end.
-
-%% Skip the remaining bytes for the current file entry
-skip_file(#reg_file_reader{handle=Handle0,pos=Pos,size=Size}=Reader) ->
- Padding = skip_padding(Size),
- AbsPos = Handle0#reader.pos + (Size-Pos) + Padding,
- case do_position(Handle0, AbsPos) of
- {ok, _, Handle1} ->
- Reader#reg_file_reader{handle=Handle1,num_bytes=0,pos=Size};
- Err ->
- throw(Err)
- end;
-skip_file(#sparse_file_reader{pos=Pos,size=Size}=Reader) ->
- case do_read(Reader, Size-Pos) of
- {ok, _, Reader2} ->
- Reader2;
- Err ->
- throw(Err)
- end.
-
-skip_padding(0) ->
- 0;
-skip_padding(Size) when (Size rem ?BLOCK_SIZE) =:= 0 ->
- 0;
-skip_padding(Size) when Size =< ?BLOCK_SIZE ->
- ?BLOCK_SIZE - Size;
-skip_padding(Size) ->
- ?BLOCK_SIZE - (Size rem ?BLOCK_SIZE).
-
-skip_unread(#reader{pos=Pos}=Reader0) when (Pos rem ?BLOCK_SIZE) > 0 ->
- Padding = skip_padding(Pos + ?BLOCK_SIZE),
- AbsPos = Pos + Padding,
- case do_position(Reader0, AbsPos) of
- {ok, _, Reader1} ->
- {ok, Reader1};
- Err ->
- throw(Err)
- end;
-skip_unread(#reader{}=Reader) ->
- {ok, Reader};
-skip_unread(#reg_file_reader{handle=Handle,num_bytes=0}) ->
- skip_unread(Handle);
-skip_unread(#reg_file_reader{}=Reader) ->
- #reg_file_reader{handle=Handle} = skip_file(Reader),
- {ok, Handle};
-skip_unread(#sparse_file_reader{handle=Handle,num_bytes=0}) ->
- skip_unread(Handle);
-skip_unread(#sparse_file_reader{}=Reader) ->
- #sparse_file_reader{handle=Handle} = skip_file(Reader),
- {ok, Handle}.
-
-write_extracted_element(#tar_header{name=Name,typeflag=Type},
- Bin,
- #read_opts{output=memory}=Opts) ->
- case typeflag(Type) of
- regular ->
- read_verbose(Opts, "x ~ts~n", [Name]),
- {ok, {Name, Bin}};
- _ ->
- ok
- end;
-write_extracted_element(#tar_header{name=Name0}=Header, Bin, Opts) ->
- Name1 = make_safe_path(Name0, Opts),
- Created =
- case typeflag(Header#tar_header.typeflag) of
- regular ->
- create_regular(Name1, Name0, Bin, Opts);
- directory ->
- read_verbose(Opts, "x ~ts~n", [Name0]),
- create_extracted_dir(Name1, Opts);
- symlink ->
- read_verbose(Opts, "x ~ts~n", [Name0]),
- create_symlink(Name1, Header#tar_header.linkname, Opts);
- Device when Device =:= char orelse Device =:= block ->
- %% char/block devices will be created as empty files
- %% and then have their major/minor device set later
- create_regular(Name1, Name0, <<>>, Opts);
- fifo ->
- %% fifo devices will be created as empty files
- create_regular(Name1, Name0, <<>>, Opts);
- Other -> % Ignore.
- read_verbose(Opts, "x ~ts - unsupported type ~p~n",
- [Name0, Other]),
- not_written
- end,
- case Created of
- ok -> set_extracted_file_info(Name1, Header);
- not_written -> ok
- end.
-
-make_safe_path([$/|Path], Opts) ->
- make_safe_path(Path, Opts);
-make_safe_path(Path, #read_opts{cwd=Cwd}) ->
- case safe_relative_path_links(Path, Cwd) of
- unsafe ->
- throw({error,{Path,unsafe_path}});
- SafePath ->
- filename:absname(SafePath, Cwd)
- end.
-
-safe_relative_path_links(Path, Cwd) ->
- case filename:pathtype(Path) of
- relative -> safe_relative_path_links(filename:split(Path), Cwd, [], "");
- _ -> unsafe
- end.
-
-safe_relative_path_links([], _Cwd, _PrevLinks, Acc) ->
- Acc;
-
-safe_relative_path_links([Segment | Segments], Cwd, PrevLinks, Acc) ->
- AccSegment = join(Acc, Segment),
-
- case r3_hex_filename:safe_relative_path(AccSegment) of
- unsafe ->
- unsafe;
-
- SafeAccSegment ->
- case file:read_link(join(Cwd, SafeAccSegment)) of
- {ok, LinkPath} ->
- case lists:member(LinkPath, PrevLinks) of
- true ->
- unsafe;
- false ->
- case safe_relative_path_links(filename:split(LinkPath), Cwd, [LinkPath | PrevLinks], Acc) of
- unsafe -> unsafe;
- NewAcc -> safe_relative_path_links(Segments, Cwd, [], NewAcc)
- end
- end;
-
- {error, _} ->
- safe_relative_path_links(Segments, Cwd, PrevLinks, SafeAccSegment)
- end
- end.
-
-join([], Path) -> Path;
-join(Left, Right) -> filename:join(Left, Right).
-
-create_regular(Name, NameInArchive, Bin, Opts) ->
- case write_extracted_file(Name, Bin, Opts) of
- not_written ->
- read_verbose(Opts, "x ~ts - exists, not created~n", [NameInArchive]),
- not_written;
- Ok ->
- read_verbose(Opts, "x ~ts~n", [NameInArchive]),
- Ok
- end.
-
-create_extracted_dir(Name, _Opts) ->
- case file:make_dir(Name) of
- ok -> ok;
- {error,enotsup} -> not_written;
- {error,eexist} -> not_written;
- {error,enoent} -> make_dirs(Name, dir);
- {error,Reason} -> throw({error, Reason})
- end.
-
-create_symlink(Name, Linkname, Opts) ->
- case file:make_symlink(Linkname, Name) of
- ok -> ok;
- {error,enoent} ->
- ok = make_dirs(Name, file),
- create_symlink(Name, Linkname, Opts);
- {error,eexist} -> not_written;
- {error,enotsup} ->
- read_verbose(Opts, "x ~ts - symbolic links not supported~n", [Name]),
- not_written;
- {error,Reason} -> throw({error, Reason})
- end.
-
-write_extracted_file(Name, Bin, Opts) ->
- Write =
- case Opts#read_opts.keep_old_files of
- true ->
- case file:read_file_info(Name) of
- {ok, _} -> false;
- _ -> true
- end;
- false -> true
- end,
- case Write of
- true -> write_file(Name, Bin);
- false -> not_written
- end.
-
-write_file(Name, Bin) ->
- case file:write_file(Name, Bin) of
- ok -> ok;
- {error,enoent} ->
- case make_dirs(Name, file) of
- ok ->
- write_file(Name, Bin);
- {error,Reason} ->
- throw({error, Reason})
- end;
- {error,Reason} ->
- throw({error, Reason})
- end.
-
-set_extracted_file_info(_, #tar_header{typeflag = ?TYPE_SYMLINK}) -> ok;
-set_extracted_file_info(_, #tar_header{typeflag = ?TYPE_LINK}) -> ok;
-set_extracted_file_info(Name, #tar_header{typeflag = ?TYPE_CHAR}=Header) ->
- set_device_info(Name, Header);
-set_extracted_file_info(Name, #tar_header{typeflag = ?TYPE_BLOCK}=Header) ->
- set_device_info(Name, Header);
-set_extracted_file_info(Name, #tar_header{mtime=Mtime,mode=Mode}) ->
- Info = #file_info{mode=Mode, mtime=Mtime},
- file:write_file_info(Name, Info, [{time, posix}]).
-
-set_device_info(Name, #tar_header{}=Header) ->
- Mtime = Header#tar_header.mtime,
- Mode = Header#tar_header.mode,
- Devmajor = Header#tar_header.devmajor,
- Devminor = Header#tar_header.devminor,
- Info = #file_info{
- mode=Mode,
- mtime=Mtime,
- major_device=Devmajor,
- minor_device=Devminor
- },
- file:write_file_info(Name, Info).
-
-%% Makes all directories leading up to the file.
-
-make_dirs(Name, file) ->
- filelib:ensure_dir(Name);
-make_dirs(Name, dir) ->
- filelib:ensure_dir(filename:join(Name,"*")).
-
-%% Prints the message on if the verbose option is given (for reading).
-read_verbose(#read_opts{verbose=true}, Format, Args) ->
- io:format(Format, Args);
-read_verbose(_, _, _) ->
- ok.
-
-%% Prints the message on if the verbose option is given.
-add_verbose(#add_opts{verbose=true}, Format, Args) ->
- io:format(Format, Args);
-add_verbose(_, _, _) ->
- ok.
-
-%%%%%%%%%%%%%%%%%%
-%% I/O primitives
-%%%%%%%%%%%%%%%%%%
-
-do_write(#reader{handle=Handle,func=Fun}=Reader0, Data)
- when is_function(Fun,2) ->
- case Fun(write,{Handle,Data}) of
- ok ->
- {ok, Pos, Reader1} = do_position(Reader0, {cur,0}),
- {ok, Reader1#reader{pos=Pos}};
- {error, _} = Err ->
- Err
- end.
-
-do_copy(#reader{func=Fun}=Reader, Source, #add_opts{chunk_size=0}=Opts)
- when is_function(Fun, 2) ->
- do_copy(Reader, Source, Opts#add_opts{chunk_size=65536});
-do_copy(#reader{func=Fun}=Reader, Source, #add_opts{chunk_size=ChunkSize})
- when is_function(Fun, 2) ->
- case file:open(Source, [read, binary]) of
- {ok, SourceFd} ->
- case copy_chunked(Reader, SourceFd, ChunkSize, 0) of
- {ok, _Copied, _Reader2} = Ok->
- _ = file:close(SourceFd),
- Ok;
- Err ->
- _ = file:close(SourceFd),
- throw(Err)
- end;
- Err ->
- throw(Err)
- end.
-
-copy_chunked(#reader{}=Reader, Source, ChunkSize, Copied) ->
- case file:read(Source, ChunkSize) of
- {ok, Bin} ->
- {ok, Reader2} = do_write(Reader, Bin),
- copy_chunked(Reader2, Source, ChunkSize, Copied+byte_size(Bin));
- eof ->
- {ok, Copied, Reader};
- Other ->
- Other
- end.
-
-
-do_position(#reader{handle=Handle,func=Fun}=Reader, Pos)
- when is_function(Fun,2)->
- case Fun(position, {Handle,Pos}) of
- {ok, NewPos} ->
- %% since Pos may not always be an absolute seek,
- %% make sure we update the reader with the new absolute position
- {ok, AbsPos} = Fun(position, {Handle, {cur, 0}}),
- {ok, NewPos, Reader#reader{pos=AbsPos}};
- Other ->
- Other
- end.
-
-do_read(#reg_file_reader{handle=Handle,pos=Pos,size=Size}=Reader, Len) ->
- NumBytes = Size - Pos,
- ActualLen = if NumBytes - Len < 0 -> NumBytes; true -> Len end,
- case do_read(Handle, ActualLen) of
- {ok, Bin, Handle2} ->
- NewPos = Pos + ActualLen,
- NumBytes2 = Size - NewPos,
- Reader1 = Reader#reg_file_reader{
- handle=Handle2,
- pos=NewPos,
- num_bytes=NumBytes2},
- {ok, Bin, Reader1};
- Other ->
- Other
- end;
-do_read(#sparse_file_reader{}=Reader, Len) ->
- do_sparse_read(Reader, Len);
-do_read(#reader{pos=Pos,handle=Handle,func=Fun}=Reader, Len)
- when is_function(Fun,2)->
- %% Always convert to binary internally
- case Fun(read2,{Handle,Len}) of
- {ok, List} when is_list(List) ->
- Bin = list_to_binary(List),
- NewPos = Pos+byte_size(Bin),
- {ok, Bin, Reader#reader{pos=NewPos}};
- {ok, Bin} when is_binary(Bin) ->
- NewPos = Pos+byte_size(Bin),
- {ok, Bin, Reader#reader{pos=NewPos}};
- Other ->
- Other
- end.
-
-
-do_sparse_read(Reader, Len) ->
- do_sparse_read(Reader, Len, <<>>).
-
-do_sparse_read(#sparse_file_reader{sparse_map=[#sparse_entry{num_bytes=0}|Entries]
- }=Reader0, Len, Acc) ->
- %% skip all empty fragments
- Reader1 = Reader0#sparse_file_reader{sparse_map=Entries},
- do_sparse_read(Reader1, Len, Acc);
-do_sparse_read(#sparse_file_reader{sparse_map=[],
- pos=Pos,size=Size}=Reader0, Len, Acc)
- when Pos < Size ->
- %% if there are no more fragments, it is possible that there is one last sparse hole
- %% this behaviour matches the BSD tar utility
- %% however, GNU tar stops returning data even if we haven't reached the end
- {ok, Bin, Reader1} = read_sparse_hole(Reader0, Size, Len),
- do_sparse_read(Reader1, Len-byte_size(Bin), <<Acc/binary,Bin/binary>>);
-do_sparse_read(#sparse_file_reader{sparse_map=[]}=Reader, _Len, Acc) ->
- {ok, Acc, Reader};
-do_sparse_read(#sparse_file_reader{}=Reader, 0, Acc) ->
- {ok, Acc, Reader};
-do_sparse_read(#sparse_file_reader{sparse_map=[#sparse_entry{offset=Offset}|_],
- pos=Pos}=Reader0, Len, Acc)
- when Pos < Offset ->
- {ok, Bin, Reader1} = read_sparse_hole(Reader0, Offset, Offset-Pos),
- do_sparse_read(Reader1, Len-byte_size(Bin), <<Acc/binary,Bin/binary>>);
-do_sparse_read(#sparse_file_reader{sparse_map=[Entry|Entries],
- pos=Pos}=Reader0, Len, Acc) ->
- %% we're in a data fragment, so read from it
- %% end offset of fragment
- EndPos = Entry#sparse_entry.offset + Entry#sparse_entry.num_bytes,
- %% bytes left in fragment
- NumBytes = EndPos - Pos,
- ActualLen = if Len > NumBytes -> NumBytes; true -> Len end,
- case do_read(Reader0#sparse_file_reader.handle, ActualLen) of
- {ok, Bin, Handle} ->
- BytesRead = byte_size(Bin),
- ActualEndPos = Pos+BytesRead,
- Reader1 = if ActualEndPos =:= EndPos ->
- Reader0#sparse_file_reader{sparse_map=Entries};
- true ->
- Reader0
- end,
- Size = Reader1#sparse_file_reader.size,
- NumBytes2 = Size - ActualEndPos,
- Reader2 = Reader1#sparse_file_reader{
- handle=Handle,
- pos=ActualEndPos,
- num_bytes=NumBytes2},
- do_sparse_read(Reader2, Len-byte_size(Bin), <<Acc/binary,Bin/binary>>);
- Other ->
- Other
- end.
-
-%% Reads a sparse hole ending at Offset
-read_sparse_hole(#sparse_file_reader{pos=Pos}=Reader, Offset, Len) ->
- N = Offset - Pos,
- N2 = if N > Len ->
- Len;
- true ->
- N
- end,
- Bin = <<0:N2/unit:8>>,
- NumBytes = Reader#sparse_file_reader.size - (Pos+N2),
- {ok, Bin, Reader#sparse_file_reader{
- num_bytes=NumBytes,
- pos=Pos+N2}}.
-
--spec do_close(reader()) -> ok | {error, term()}.
-do_close(#reader{handle=Handle,func=Fun}) when is_function(Fun,2) ->
- Fun(close,Handle).
-
-%%%%%%%%%%%%%%%%%%
-%% Option parsing
-%%%%%%%%%%%%%%%%%%
-
-extract_opts(List) ->
- extract_opts(List, default_options()).
-
-table_opts(List) ->
- read_opts(List, default_options()).
-
-default_options() ->
- {ok, Cwd} = file:get_cwd(),
- #read_opts{cwd=Cwd}.
-
-extract_opts([keep_old_files|Rest], Opts) ->
- extract_opts(Rest, Opts#read_opts{keep_old_files=true});
-extract_opts([{cwd, Cwd}|Rest], Opts) ->
- extract_opts(Rest, Opts#read_opts{cwd=Cwd});
-extract_opts([{files, Files}|Rest], Opts) ->
- Set = ordsets:from_list(Files),
- extract_opts(Rest, Opts#read_opts{files=Set});
-extract_opts([memory|Rest], Opts) ->
- extract_opts(Rest, Opts#read_opts{output=memory});
-extract_opts([compressed|Rest], Opts=#read_opts{open_mode=OpenMode}) ->
- extract_opts(Rest, Opts#read_opts{open_mode=[compressed|OpenMode]});
-extract_opts([cooked|Rest], Opts=#read_opts{open_mode=OpenMode}) ->
- extract_opts(Rest, Opts#read_opts{open_mode=[cooked|OpenMode]});
-extract_opts([verbose|Rest], Opts) ->
- extract_opts(Rest, Opts#read_opts{verbose=true});
-extract_opts([Other|Rest], Opts) ->
- extract_opts(Rest, read_opts([Other], Opts));
-extract_opts([], Opts) ->
- Opts.
-
-read_opts([compressed|Rest], Opts=#read_opts{open_mode=OpenMode}) ->
- read_opts(Rest, Opts#read_opts{open_mode=[compressed|OpenMode]});
-read_opts([cooked|Rest], Opts=#read_opts{open_mode=OpenMode}) ->
- read_opts(Rest, Opts#read_opts{open_mode=[cooked|OpenMode]});
-read_opts([verbose|Rest], Opts) ->
- read_opts(Rest, Opts#read_opts{verbose=true});
-read_opts([_|Rest], Opts) ->
- read_opts(Rest, Opts);
-read_opts([], Opts) ->
- Opts.
diff --git a/apps/rebar/src/vendored/r3_hex_erl_tar.hrl b/apps/rebar/src/vendored/r3_hex_erl_tar.hrl
deleted file mode 100644
index e3f7bab2..00000000
--- a/apps/rebar/src/vendored/r3_hex_erl_tar.hrl
+++ /dev/null
@@ -1,411 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-% Copied from https://github.com/erlang/otp/blob/OTP-20.0.1/lib/stdlib/src/erl_tar.hrl
-
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2017. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-
-%% Options used when adding files to a tar archive.
--record(add_opts, {
- read_info, %% Fun to use for read file/link info.
- chunk_size = 0 :: integer(), %% For file reading when sending to sftp. 0=do not chunk
- verbose = false :: boolean(), %% Verbose on/off.
- atime = undefined :: undefined | integer(),
- mtime = undefined :: undefined | integer(),
- ctime = undefined :: undefined | integer(),
- uid = 0 :: integer(),
- gid = 0 :: integer()}).
--type add_opts() :: #add_opts{}.
-
-%% Options used when reading a tar archive.
--record(read_opts, {
- cwd :: string(), %% Current working directory.
- keep_old_files = false :: boolean(), %% Overwrite or not.
- files = all, %% Set of files to extract (or all)
- output = file :: 'file' | 'memory',
- open_mode = [], %% Open mode options.
- verbose = false :: boolean()}). %% Verbose on/off.
--type read_opts() :: #read_opts{}.
-
--type add_opt() :: dereference
- | verbose
- | {chunks, pos_integer()}
- | {atime, integer()}
- | {mtime, integer()}
- | {ctime, integer()}
- | {uid, integer()}
- | {gid, integer()}.
-
-
--type extract_opt() :: {cwd, string()} |
- {files, [string()]} |
- compressed |
- cooked |
- memory |
- keep_old_files |
- verbose.
-
--type create_opt() :: compressed |
- cooked |
- dereference |
- verbose.
-
--type filelist() :: [file:filename() |
- {string(), binary()} |
- {string(), file:filename()}].
-
--type tar_time() :: non_neg_integer().
-
-%% The tar header, once fully parsed.
--record(tar_header, {
- name = "" :: string(), %% name of header file entry
- mode = 8#100644 :: non_neg_integer(), %% permission and mode bits
- uid = 0 :: non_neg_integer(), %% user id of owner
- gid = 0 :: non_neg_integer(), %% group id of owner
- size = 0 :: non_neg_integer(), %% length in bytes
- mtime :: tar_time(), %% modified time
- typeflag :: char(), %% type of header entry
- linkname = "" :: string(), %% target name of link
- uname = "" :: string(), %% user name of owner
- gname = "" :: string(), %% group name of owner
- devmajor = 0 :: non_neg_integer(), %% major number of character or block device
- devminor = 0 :: non_neg_integer(), %% minor number of character or block device
- atime :: tar_time(), %% access time
- ctime :: tar_time() %% status change time
- }).
--type tar_header() :: #tar_header{}.
-
-%% Metadata for a sparse file fragment
--record(sparse_entry, {
- offset = 0 :: non_neg_integer(),
- num_bytes = 0 :: non_neg_integer()}).
--type sparse_entry() :: #sparse_entry{}.
-%% Contains metadata about fragments of a sparse file
--record(sparse_array, {
- entries = [] :: [sparse_entry()],
- is_extended = false :: boolean(),
- max_entries = 0 :: non_neg_integer()}).
--type sparse_array() :: #sparse_array{}.
-%% A subset of tar header fields common to all tar implementations
--record(header_v7, {
- name :: binary(),
- mode :: binary(), %% octal
- uid :: binary(), %% integer
- gid :: binary(), %% integer
- size :: binary(), %% integer
- mtime :: binary(), %% integer
- checksum :: binary(), %% integer
- typeflag :: byte(), %% char
- linkname :: binary()}).
--type header_v7() :: #header_v7{}.
-%% The set of fields specific to GNU tar formatted archives
--record(header_gnu, {
- header_v7 :: header_v7(),
- magic :: binary(),
- version :: binary(),
- uname :: binary(),
- gname :: binary(),
- devmajor :: binary(), %% integer
- devminor :: binary(), %% integer
- atime :: binary(), %% integer
- ctime :: binary(), %% integer
- sparse :: sparse_array(),
- real_size :: binary()}). %% integer
--type header_gnu() :: #header_gnu{}.
-%% The set of fields specific to STAR-formatted archives
--record(header_star, {
- header_v7 :: header_v7(),
- magic :: binary(),
- version :: binary(),
- uname :: binary(),
- gname :: binary(),
- devmajor :: binary(), %% integer
- devminor :: binary(), %% integer
- prefix :: binary(),
- atime :: binary(), %% integer
- ctime :: binary(), %% integer
- trailer :: binary()}).
--type header_star() :: #header_star{}.
-%% The set of fields specific to USTAR-formatted archives
--record(header_ustar, {
- header_v7 :: header_v7(),
- magic :: binary(),
- version :: binary(),
- uname :: binary(),
- gname :: binary(),
- devmajor :: binary(), %% integer
- devminor :: binary(), %% integer
- prefix :: binary()}).
--type header_ustar() :: #header_ustar{}.
-
--type header_fields() :: header_v7() |
- header_gnu() |
- header_star() |
- header_ustar().
-
-%% The overall tar reader, it holds the low-level file handle,
-%% its access, position, and the I/O primitives wrapper.
--record(reader, {
- handle :: file:io_device() | term(),
- access :: read | write | ram,
- pos = 0 :: non_neg_integer(),
- func :: file_op()
- }).
--type reader() :: #reader{}.
-%% A reader for a regular file within the tar archive,
-%% It tracks its current state relative to that file.
--record(reg_file_reader, {
- handle :: reader(),
- num_bytes = 0,
- pos = 0,
- size = 0
- }).
--type reg_file_reader() :: #reg_file_reader{}.
-%% A reader for a sparse file within the tar archive,
-%% It tracks its current state relative to that file.
--record(sparse_file_reader, {
- handle :: reader(),
- num_bytes = 0, %% bytes remaining
- pos = 0, %% pos
- size = 0, %% total size of file
- sparse_map = #sparse_array{}
- }).
--type sparse_file_reader() :: #sparse_file_reader{}.
-
-%% Types for the readers
--type reader_type() :: reader() | reg_file_reader() | sparse_file_reader().
--type handle() :: file:io_device() | term().
-
-%% Type for the I/O primitive wrapper function
--type file_op() :: fun((write | close | read2 | position,
- {handle(), iodata()} | handle() | {handle(), non_neg_integer()}
- | {handle(), non_neg_integer()}) ->
- ok | eof | {ok, string() | binary()} | {ok, non_neg_integer()}
- | {error, term()}).
-
-%% These constants (except S_IFMT) are
-%% used to determine what type of device
-%% a file is. Namely, `S_IFMT band file_info.mode`
-%% will equal one of these constants, and tells us
-%% which type it is. The stdlib file_info record
-%% does not differentiate between device types, and
-%% will not allow us to differentiate between sockets
-%% and named pipes. These constants are pulled from libc.
--define(S_IFMT, 61440).
--define(S_IFSOCK, 49152). %% socket
--define(S_FIFO, 4096). %% fifo/named pipe
--define(S_IFBLK, 24576). %% block device
--define(S_IFCHR, 8192). %% character device
-
-%% Typeflag constants for the tar header
--define(TYPE_REGULAR, $0). %% regular file
--define(TYPE_REGULAR_A, 0). %% regular file
--define(TYPE_LINK, $1). %% hard link
--define(TYPE_SYMLINK, $2). %% symbolic link
--define(TYPE_CHAR, $3). %% character device node
--define(TYPE_BLOCK, $4). %% block device node
--define(TYPE_DIR, $5). %% directory
--define(TYPE_FIFO, $6). %% fifo node
--define(TYPE_CONT, $7). %% reserved
--define(TYPE_X_HEADER, $x). %% extended header
--define(TYPE_X_GLOBAL_HEADER, $g). %% global extended header
--define(TYPE_GNU_LONGNAME, $L). %% next file has a long name
--define(TYPE_GNU_LONGLINK, $K). %% next file symlinks to a file with a long name
--define(TYPE_GNU_SPARSE, $S). %% sparse file
-
-%% Mode constants from tar spec
--define(MODE_ISUID, 4000). %% set uid
--define(MODE_ISGID, 2000). %% set gid
--define(MODE_ISVTX, 1000). %% save text (sticky bit)
--define(MODE_ISDIR, 40000). %% directory
--define(MODE_ISFIFO, 10000). %% fifo
--define(MODE_ISREG, 100000). %% regular file
--define(MODE_ISLNK, 120000). %% symbolic link
--define(MODE_ISBLK, 60000). %% block special file
--define(MODE_ISCHR, 20000). %% character special file
--define(MODE_ISSOCK, 140000). %% socket
-
-%% Keywords for PAX extended header
--define(PAX_ATIME, <<"atime">>).
--define(PAX_CHARSET, <<"charset">>).
--define(PAX_COMMENT, <<"comment">>).
--define(PAX_CTIME, <<"ctime">>). %% ctime is not a valid pax header
--define(PAX_GID, <<"gid">>).
--define(PAX_GNAME, <<"gname">>).
--define(PAX_LINKPATH, <<"linkpath">>).
--define(PAX_MTIME, <<"mtime">>).
--define(PAX_PATH, <<"path">>).
--define(PAX_SIZE, <<"size">>).
--define(PAX_UID, <<"uid">>).
--define(PAX_UNAME, <<"uname">>).
--define(PAX_XATTR, <<"SCHILY.xattr.">>).
--define(PAX_XATTR_STR, "SCHILY.xattr.").
--define(PAX_NONE, <<"">>).
-
-%% Tar format constants
-%% Unknown format
--define(FORMAT_UNKNOWN, 0).
-%% The format of the original Unix V7 tar tool prior to standardization
--define(FORMAT_V7, 1).
-%% The old and new GNU formats, incompatible with USTAR.
-%% This covers the old GNU sparse extension, but it does
-%% not cover the GNU sparse extensions using PAX headers,
-%% versions 0.0, 0.1, and 1.0; these fall under the PAX format.
--define(FORMAT_GNU, 2).
-%% Schily's tar format, which is incompatible with USTAR.
-%% This does not cover STAR extensions to the PAX format; these
-%% fall under the PAX format.
--define(FORMAT_STAR, 3).
-%% USTAR is the former standardization of tar defined in POSIX.1-1988,
-%% it is incompatible with the GNU and STAR formats.
--define(FORMAT_USTAR, 4).
-%% PAX is the latest standardization of tar defined in POSIX.1-2001.
-%% This is an extension of USTAR and is "backwards compatible" with it.
-%%
-%% Some newer formats add their own extensions to PAX, such as GNU sparse
-%% files and SCHILY extended attributes. Since they are backwards compatible
-%% with PAX, they will be labelled as "PAX".
--define(FORMAT_PAX, 5).
-
-%% Magic constants
--define(MAGIC_GNU, <<"ustar ">>).
--define(VERSION_GNU, <<" \x00">>).
--define(MAGIC_USTAR, <<"ustar\x00">>).
--define(VERSION_USTAR, <<"00">>).
--define(TRAILER_STAR, <<"tar\x00">>).
-
-%% Size constants
--define(BLOCK_SIZE, 512). %% size of each block in a tar stream
--define(NAME_SIZE, 100). %% max length of the name field in USTAR format
--define(PREFIX_SIZE, 155). %% max length of the prefix field in USTAR format
-
-%% Maximum size of a nanosecond value as an integer
--define(MAX_NANO_INT_SIZE, 9).
-%% Maximum size of a 64-bit signed integer
--define(MAX_INT64, (1 bsl 63 - 1)).
-
--define(PAX_GNU_SPARSE_NUMBLOCKS, <<"GNU.sparse.numblocks">>).
--define(PAX_GNU_SPARSE_OFFSET, <<"GNU.sparse.offset">>).
--define(PAX_GNU_SPARSE_NUMBYTES, <<"GNU.sparse.numbytes">>).
--define(PAX_GNU_SPARSE_MAP, <<"GNU.sparse.map">>).
--define(PAX_GNU_SPARSE_NAME, <<"GNU.sparse.name">>).
--define(PAX_GNU_SPARSE_MAJOR, <<"GNU.sparse.major">>).
--define(PAX_GNU_SPARSE_MINOR, <<"GNU.sparse.minor">>).
--define(PAX_GNU_SPARSE_SIZE, <<"GNU.sparse.size">>).
--define(PAX_GNU_SPARSE_REALSIZE, <<"GNU.sparse.realsize">>).
-
--define(V7_NAME, 0).
--define(V7_NAME_LEN, 100).
--define(V7_MODE, 100).
--define(V7_MODE_LEN, 8).
--define(V7_UID, 108).
--define(V7_UID_LEN, 8).
--define(V7_GID, 116).
--define(V7_GID_LEN, 8).
--define(V7_SIZE, 124).
--define(V7_SIZE_LEN, 12).
--define(V7_MTIME, 136).
--define(V7_MTIME_LEN, 12).
--define(V7_CHKSUM, 148).
--define(V7_CHKSUM_LEN, 8).
--define(V7_TYPE, 156).
--define(V7_TYPE_LEN, 1).
--define(V7_LINKNAME, 157).
--define(V7_LINKNAME_LEN, 100).
-
--define(STAR_TRAILER, 508).
--define(STAR_TRAILER_LEN, 4).
-
--define(USTAR_MAGIC, 257).
--define(USTAR_MAGIC_LEN, 6).
--define(USTAR_VERSION, 263).
--define(USTAR_VERSION_LEN, 2).
--define(USTAR_UNAME, 265).
--define(USTAR_UNAME_LEN, 32).
--define(USTAR_GNAME, 297).
--define(USTAR_GNAME_LEN, 32).
--define(USTAR_DEVMAJ, 329).
--define(USTAR_DEVMAJ_LEN, 8).
--define(USTAR_DEVMIN, 337).
--define(USTAR_DEVMIN_LEN, 8).
--define(USTAR_PREFIX, 345).
--define(USTAR_PREFIX_LEN, 155).
-
--define(GNU_MAGIC, 257).
--define(GNU_MAGIC_LEN, 6).
--define(GNU_VERSION, 263).
--define(GNU_VERSION_LEN, 2).
-
-%% ?BLOCK_SIZE of zero-bytes.
-%% Two of these in a row mark the end of an archive.
--define(ZERO_BLOCK, <<0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0>>).
-
--define(BILLION, 1000000000).
-
--define(EPOCH, {{1970,1,1}, {0,0,0}}).
diff --git a/apps/rebar/src/vendored/r3_hex_filename.erl b/apps/rebar/src/vendored/r3_hex_filename.erl
deleted file mode 100644
index 34ebc088..00000000
--- a/apps/rebar/src/vendored/r3_hex_filename.erl
+++ /dev/null
@@ -1,60 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-% @private
-% Excerpt from https://github.com/erlang/otp/blob/OTP-20.0.1/lib/stdlib/src/filename.erl#L761-L788
-% with modifications for changing local function calls to remote function calls
-% to the `filename` module, for the functions `pathtype/1`, `split/1`, and `join/1`
-%
-% safe_relative_path/1 was not present in earlier OTP releases.
-
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2017. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(r3_hex_filename).
--export([safe_relative_path/1]).
-
-safe_relative_path(Path) ->
- case filename:pathtype(Path) of
- relative ->
- Cs0 = filename:split(Path),
- safe_relative_path_1(Cs0, []);
- _ ->
- unsafe
- end.
-
-safe_relative_path_1(["."|T], Acc) ->
- safe_relative_path_1(T, Acc);
-safe_relative_path_1([<<".">>|T], Acc) ->
- safe_relative_path_1(T, Acc);
-safe_relative_path_1([".."|T], Acc) ->
- climb(T, Acc);
-safe_relative_path_1([<<"..">>|T], Acc) ->
- climb(T, Acc);
-safe_relative_path_1([H|T], Acc) ->
- safe_relative_path_1(T, [H|Acc]);
-safe_relative_path_1([], []) ->
- [];
-safe_relative_path_1([], Acc) ->
- filename:join(lists:reverse(Acc)).
-
-climb(_, []) ->
- unsafe;
-climb(T, [_|Acc]) ->
- safe_relative_path_1(T, Acc).
diff --git a/apps/rebar/src/vendored/r3_hex_http.erl b/apps/rebar/src/vendored/r3_hex_http.erl
deleted file mode 100644
index 19ea90b5..00000000
--- a/apps/rebar/src/vendored/r3_hex_http.erl
+++ /dev/null
@@ -1,53 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_http).
--export([request/5]).
--ifdef(TEST).
--export([user_agent/1]).
--endif.
--include_lib("r3_hex_core.hrl").
-
--type method() :: get | post | put | patch | delete.
--type status() :: non_neg_integer().
--export_type([status/0]).
--type headers() :: #{binary() => binary()}.
--export_type([headers/0]).
--type body() :: {ContentType :: binary(), Body :: binary()} | undefined.
--type adapter_config() :: map().
-
--callback request(method(), URI :: binary(), headers(), body(), adapter_config()) ->
- {ok, status(), headers(), binary()} |
- {error, term()}.
-
--spec request(r3_hex_core:config(), method(), URI :: binary(), headers(), body()) ->
- {ok, {status(), headers(), binary()}} | {error, term()}.
-request(Config, Method, URI, Headers, Body) when is_binary(URI) and is_map(Headers) ->
- {Adapter, AdapterConfig} = case maps:get(http_adapter, Config, {r3_hex_http_httpc, #{}}) of
- {Adapter0, AdapterConfig0} ->
- {Adapter0, AdapterConfig0};
- %% TODO: remove in v0.9
- Adapter0 when is_atom(Adapter0) ->
- AdapterConfig0 = maps:get(http_adapter_config, Config, #{}),
- io:format("[r3_hex_http] setting #{http_adapter => Module, http_adapter_config => Map} "
- "is deprecated in favour of #{http_adapter => {Module, Map}}~n"),
- {Adapter0, AdapterConfig0}
- end,
- UserAgentFragment = maps:get(http_user_agent_fragment, Config),
- Headers2 = put_new(<<"user-agent">>, user_agent(UserAgentFragment), Headers),
- Adapter:request(Method, URI, Headers2, Body, AdapterConfig).
-
-user_agent(UserAgentFragment) ->
- OTPRelease = erlang:system_info(otp_release),
- ERTSVersion = erlang:system_info(version),
- OTPString = " (OTP/" ++ OTPRelease ++ ") (erts/" ++ ERTSVersion ++ ")",
- iolist_to_binary(["hex_core/", ?HEX_CORE_VERSION, " ", UserAgentFragment, OTPString]).
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-put_new(Key, Value, Map) ->
- case maps:find(Key, Map) of
- {ok, _} -> Map;
- error -> maps:put(Key, Value, Map)
- end.
diff --git a/apps/rebar/src/vendored/r3_hex_http_httpc.erl b/apps/rebar/src/vendored/r3_hex_http_httpc.erl
deleted file mode 100644
index 79a35477..00000000
--- a/apps/rebar/src/vendored/r3_hex_http_httpc.erl
+++ /dev/null
@@ -1,41 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% @hidden
-
--module(r3_hex_http_httpc).
--behaviour(r3_hex_http).
--export([request/5]).
-
-%%====================================================================
-%% API functions
-%%====================================================================
-
-request(Method, URI, ReqHeaders, Body, AdapterConfig) ->
- Profile = maps:get(profile, AdapterConfig, default),
- Request = build_request(URI, ReqHeaders, Body),
- case httpc:request(Method, Request, [], [{body_format, binary}], Profile) of
- {ok, {{_, StatusCode, _}, RespHeaders, RespBody}} ->
- RespHeaders2 = load_headers(RespHeaders),
- {ok, {StatusCode, RespHeaders2, RespBody}};
- {error, Reason} -> {error, Reason}
- end.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-build_request(URI, ReqHeaders, Body) ->
- build_request2(binary_to_list(URI), dump_headers(ReqHeaders), Body).
-
-build_request2(URI, ReqHeaders, undefined) ->
- {URI, ReqHeaders};
-build_request2(URI, ReqHeaders, {ContentType, Body}) ->
- {URI, ReqHeaders, ContentType, Body}.
-
-dump_headers(Map) ->
- maps:fold(fun(K, V, Acc) ->
- [{binary_to_list(K), binary_to_list(V)} | Acc] end, [], Map).
-
-load_headers(List) ->
- lists:foldl(fun({K, V}, Acc) ->
- maps:put(list_to_binary(K), list_to_binary(V), Acc) end, #{}, List).
diff --git a/apps/rebar/src/vendored/r3_hex_pb_names.erl b/apps/rebar/src/vendored/r3_hex_pb_names.erl
deleted file mode 100644
index 420058e8..00000000
--- a/apps/rebar/src/vendored/r3_hex_pb_names.erl
+++ /dev/null
@@ -1,879 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% -*- coding: utf-8 -*-
-%% @private
-%% Automatically generated, do not edit
-%% Generated by gpb_compile version 4.10.0
--module(r3_hex_pb_names).
-
--export([encode_msg/2, encode_msg/3]).
--export([decode_msg/2, decode_msg/3]).
--export([merge_msgs/3, merge_msgs/4]).
--export([verify_msg/2, verify_msg/3]).
--export([get_msg_defs/0]).
--export([get_msg_names/0]).
--export([get_group_names/0]).
--export([get_msg_or_group_names/0]).
--export([get_enum_names/0]).
--export([find_msg_def/1, fetch_msg_def/1]).
--export([find_enum_def/1, fetch_enum_def/1]).
--export([enum_symbol_by_value/2, enum_value_by_symbol/2]).
--export([get_service_names/0]).
--export([get_service_def/1]).
--export([get_rpc_names/1]).
--export([find_rpc_def/2, fetch_rpc_def/2]).
--export([fqbin_to_service_name/1]).
--export([service_name_to_fqbin/1]).
--export([fqbins_to_service_and_rpc_name/2]).
--export([service_and_rpc_name_to_fqbins/2]).
--export([fqbin_to_msg_name/1]).
--export([msg_name_to_fqbin/1]).
--export([fqbin_to_enum_name/1]).
--export([enum_name_to_fqbin/1]).
--export([get_package_name/0]).
--export([uses_packages/0]).
--export([source_basename/0]).
--export([get_all_source_basenames/0]).
--export([get_all_proto_names/0]).
--export([get_msg_containment/1]).
--export([get_pkg_containment/1]).
--export([get_service_containment/1]).
--export([get_rpc_containment/1]).
--export([get_enum_containment/1]).
--export([get_proto_by_msg_name_as_fqbin/1]).
--export([get_proto_by_service_name_as_fqbin/1]).
--export([get_proto_by_enum_name_as_fqbin/1]).
--export([get_protos_by_pkg_name_as_fqbin/1]).
--export([gpb_version_as_string/0, gpb_version_as_list/0]).
-
-
-%% enumerated types
-
--export_type([]).
-
-%% message types
--type 'Names'() ::
- #{packages => ['Package'()], % = 1
- repository := iodata() % = 2
- }.
-
--type 'Package'() ::
- #{name := iodata() % = 1
- }.
-
--export_type(['Names'/0, 'Package'/0]).
-
--spec encode_msg('Names'() | 'Package'(), atom()) -> binary().
-encode_msg(Msg, MsgName) when is_atom(MsgName) ->
- encode_msg(Msg, MsgName, []).
-
--spec encode_msg('Names'() | 'Package'(), atom(), list()) -> binary().
-encode_msg(Msg, MsgName, Opts) ->
- verify_msg(Msg, MsgName, Opts),
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Names' ->
- encode_msg_Names(id(Msg, TrUserData), TrUserData);
- 'Package' ->
- encode_msg_Package(id(Msg, TrUserData), TrUserData)
- end.
-
-
-encode_msg_Names(Msg, TrUserData) ->
- encode_msg_Names(Msg, <<>>, TrUserData).
-
-
-encode_msg_Names(#{repository := F2} = M, Bin,
- TrUserData) ->
- B1 = case M of
- #{packages := F1} ->
- TrF1 = id(F1, TrUserData),
- if TrF1 == [] -> Bin;
- true -> e_field_Names_packages(TrF1, Bin, TrUserData)
- end;
- _ -> Bin
- end,
- begin
- TrF2 = id(F2, TrUserData),
- e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)
- end.
-
-encode_msg_Package(Msg, TrUserData) ->
- encode_msg_Package(Msg, <<>>, TrUserData).
-
-
-encode_msg_Package(#{name := F1}, Bin, TrUserData) ->
- begin
- TrF1 = id(F1, TrUserData),
- e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
- end.
-
-e_mfield_Names_packages(Msg, Bin, TrUserData) ->
- SubBin = encode_msg_Package(Msg, <<>>, TrUserData),
- Bin2 = e_varint(byte_size(SubBin), Bin),
- <<Bin2/binary, SubBin/binary>>.
-
-e_field_Names_packages([Elem | Rest], Bin,
- TrUserData) ->
- Bin2 = <<Bin/binary, 10>>,
- Bin3 = e_mfield_Names_packages(id(Elem, TrUserData),
- Bin2, TrUserData),
- e_field_Names_packages(Rest, Bin3, TrUserData);
-e_field_Names_packages([], Bin, _TrUserData) -> Bin.
-
--compile({nowarn_unused_function,e_type_sint/3}).
-e_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->
- e_varint(Value * 2, Bin);
-e_type_sint(Value, Bin, _TrUserData) ->
- e_varint(Value * -2 - 1, Bin).
-
--compile({nowarn_unused_function,e_type_int32/3}).
-e_type_int32(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int32(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_int64/3}).
-e_type_int64(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int64(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_bool/3}).
-e_type_bool(true, Bin, _TrUserData) ->
- <<Bin/binary, 1>>;
-e_type_bool(false, Bin, _TrUserData) ->
- <<Bin/binary, 0>>;
-e_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;
-e_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.
-
--compile({nowarn_unused_function,e_type_string/3}).
-e_type_string(S, Bin, _TrUserData) ->
- Utf8 = unicode:characters_to_binary(S),
- Bin2 = e_varint(byte_size(Utf8), Bin),
- <<Bin2/binary, Utf8/binary>>.
-
--compile({nowarn_unused_function,e_type_bytes/3}).
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_binary(Bytes) ->
- Bin2 = e_varint(byte_size(Bytes), Bin),
- <<Bin2/binary, Bytes/binary>>;
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_list(Bytes) ->
- BytesBin = iolist_to_binary(Bytes),
- Bin2 = e_varint(byte_size(BytesBin), Bin),
- <<Bin2/binary, BytesBin/binary>>.
-
--compile({nowarn_unused_function,e_type_fixed32/3}).
-e_type_fixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed32/3}).
-e_type_sfixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little-signed>>.
-
--compile({nowarn_unused_function,e_type_fixed64/3}).
-e_type_fixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed64/3}).
-e_type_sfixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little-signed>>.
-
--compile({nowarn_unused_function,e_type_float/3}).
-e_type_float(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:32/little-float>>;
-e_type_float(infinity, Bin, _) ->
- <<Bin/binary, 0:16, 128, 127>>;
-e_type_float('-infinity', Bin, _) ->
- <<Bin/binary, 0:16, 128, 255>>;
-e_type_float(nan, Bin, _) ->
- <<Bin/binary, 0:16, 192, 127>>.
-
--compile({nowarn_unused_function,e_type_double/3}).
-e_type_double(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:64/little-float>>;
-e_type_double(infinity, Bin, _) ->
- <<Bin/binary, 0:48, 240, 127>>;
-e_type_double('-infinity', Bin, _) ->
- <<Bin/binary, 0:48, 240, 255>>;
-e_type_double(nan, Bin, _) ->
- <<Bin/binary, 0:48, 248, 127>>.
-
--compile({nowarn_unused_function,e_varint/3}).
-e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_varint/2}).
-e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
-e_varint(N, Bin) ->
- Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
- e_varint(N bsr 7, Bin2).
-
-
-decode_msg(Bin, MsgName) when is_binary(Bin) ->
- decode_msg(Bin, MsgName, []).
-
-decode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->
- TrUserData = proplists:get_value(user_data, Opts),
- decode_msg_1_catch(Bin, MsgName, TrUserData).
-
--ifdef('OTP_RELEASE').
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--else.
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason ->
- StackTrace = erlang:get_stacktrace(),
- error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--endif.
-
-decode_msg_2_doit('Names', Bin, TrUserData) ->
- id(decode_msg_Names(Bin, TrUserData), TrUserData);
-decode_msg_2_doit('Package', Bin, TrUserData) ->
- id(decode_msg_Package(Bin, TrUserData), TrUserData).
-
-
-
-decode_msg_Names(Bin, TrUserData) ->
- dfp_read_field_def_Names(Bin, 0, 0, id([], TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Names(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Names_packages(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Names(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Names_repository(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Names(<<>>, 0, 0, R1, F@_2,
- TrUserData) ->
- S1 = #{repository => F@_2},
- if R1 == '$undef' -> S1;
- true -> S1#{packages => lists_reverse(R1, TrUserData)}
- end;
-dfp_read_field_def_Names(Other, Z1, Z2, F@_1, F@_2,
- TrUserData) ->
- dg_read_field_def_Names(Other, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-dg_read_field_def_Names(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Names(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-dg_read_field_def_Names(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Names_packages(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 18 ->
- d_field_Names_repository(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Names(Rest, 0, 0, F@_1, F@_2, TrUserData);
- 1 -> skip_64_Names(Rest, 0, 0, F@_1, F@_2, TrUserData);
- 2 ->
- skip_length_delimited_Names(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 3 ->
- skip_group_Names(Rest, Key bsr 3, 0, F@_1, F@_2,
- TrUserData);
- 5 -> skip_32_Names(Rest, 0, 0, F@_1, F@_2, TrUserData)
- end
- end;
-dg_read_field_def_Names(<<>>, 0, 0, R1, F@_2,
- TrUserData) ->
- S1 = #{repository => F@_2},
- if R1 == '$undef' -> S1;
- true -> S1#{packages => lists_reverse(R1, TrUserData)}
- end.
-
-d_field_Names_packages(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Names_packages(Rest, N + 7, X bsl N + Acc, F@_1,
- F@_2, TrUserData);
-d_field_Names_packages(<<0:1, X:7, Rest/binary>>, N,
- Acc, Prev, F@_2, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bs:Len/binary, Rest2/binary>> = Rest,
- {id(decode_msg_Package(Bs, TrUserData), TrUserData),
- Rest2}
- end,
- dfp_read_field_def_Names(RestF, 0, 0,
- cons(NewFValue, Prev, TrUserData), F@_2,
- TrUserData).
-
-d_field_Names_repository(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Names_repository(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-d_field_Names_repository(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Names(RestF, 0, 0, F@_1, NewFValue,
- TrUserData).
-
-skip_varint_Names(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- skip_varint_Names(Rest, Z1, Z2, F@_1, F@_2, TrUserData);
-skip_varint_Names(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_Names(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_length_delimited_Names(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- skip_length_delimited_Names(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-skip_length_delimited_Names(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Names(Rest2, 0, 0, F@_1, F@_2,
- TrUserData).
-
-skip_group_Names(Bin, FNum, Z2, F@_1, F@_2,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Names(Rest, 0, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_32_Names(<<_:32, Rest/binary>>, Z1, Z2, F@_1, F@_2,
- TrUserData) ->
- dfp_read_field_def_Names(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_64_Names(<<_:64, Rest/binary>>, Z1, Z2, F@_1, F@_2,
- TrUserData) ->
- dfp_read_field_def_Names(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-decode_msg_Package(Bin, TrUserData) ->
- dfp_read_field_def_Package(Bin, 0, 0,
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Package(<<10, Rest/binary>>, Z1, Z2,
- F@_1, TrUserData) ->
- d_field_Package_name(Rest, Z1, Z2, F@_1, TrUserData);
-dfp_read_field_def_Package(<<>>, 0, 0, F@_1, _) ->
- #{name => F@_1};
-dfp_read_field_def_Package(Other, Z1, Z2, F@_1,
- TrUserData) ->
- dg_read_field_def_Package(Other, Z1, Z2, F@_1,
- TrUserData).
-
-dg_read_field_def_Package(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Package(Rest, N + 7, X bsl N + Acc,
- F@_1, TrUserData);
-dg_read_field_def_Package(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Package_name(Rest, 0, 0, F@_1, TrUserData);
- _ ->
- case Key band 7 of
- 0 -> skip_varint_Package(Rest, 0, 0, F@_1, TrUserData);
- 1 -> skip_64_Package(Rest, 0, 0, F@_1, TrUserData);
- 2 ->
- skip_length_delimited_Package(Rest, 0, 0, F@_1,
- TrUserData);
- 3 ->
- skip_group_Package(Rest, Key bsr 3, 0, F@_1,
- TrUserData);
- 5 -> skip_32_Package(Rest, 0, 0, F@_1, TrUserData)
- end
- end;
-dg_read_field_def_Package(<<>>, 0, 0, F@_1, _) ->
- #{name => F@_1}.
-
-d_field_Package_name(<<1:1, X:7, Rest/binary>>, N, Acc,
- F@_1, TrUserData)
- when N < 57 ->
- d_field_Package_name(Rest, N + 7, X bsl N + Acc, F@_1,
- TrUserData);
-d_field_Package_name(<<0:1, X:7, Rest/binary>>, N, Acc,
- _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0, NewFValue,
- TrUserData).
-
-skip_varint_Package(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, TrUserData) ->
- skip_varint_Package(Rest, Z1, Z2, F@_1, TrUserData);
-skip_varint_Package(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1,
- TrUserData).
-
-skip_length_delimited_Package(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, TrUserData)
- when N < 57 ->
- skip_length_delimited_Package(Rest, N + 7,
- X bsl N + Acc, F@_1, TrUserData);
-skip_length_delimited_Package(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Package(Rest2, 0, 0, F@_1,
- TrUserData).
-
-skip_group_Package(Bin, FNum, Z2, F@_1, TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Package(Rest, 0, Z2, F@_1,
- TrUserData).
-
-skip_32_Package(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1,
- TrUserData).
-
-skip_64_Package(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1,
- TrUserData).
-
-read_group(Bin, FieldNum) ->
- {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),
- <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
- {Group, Rest}.
-
-%% Like skipping over fields, but record the total length,
-%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
-%% Record the length because varints may be non-optimally encoded.
-%%
-%% Groups can be nested, but assume the same FieldNum cannot be nested
-%% because group field numbers are shared with the rest of the fields
-%% numbers. Thus we can search just for an group-end with the same
-%% field number.
-%%
-%% (The only time the same group field number could occur would
-%% be in a nested sub message, but then it would be inside a
-%% length-delimited entry, which we skip-read by length.)
-read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)
- when N < (32-7) ->
- read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);
-read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,
- FieldNum) ->
- Key = X bsl N + Acc,
- TagLen1 = TagLen + 1,
- case {Key bsr 3, Key band 7} of
- {FieldNum, 4} -> % 4 = group_end
- {NumBytes, TagLen1};
- {_, 0} -> % 0 = varint
- read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);
- {_, 1} -> % 1 = bits64
- <<_:64, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);
- {_, 2} -> % 2 = length_delimited
- read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);
- {_, 3} -> % 3 = group_start
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 4} -> % 4 = group_end
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 5} -> % 5 = bits32
- <<_:32, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)
- end.
-
-read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);
-read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->
- read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).
-
-read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);
-read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->
- Len = X bsl N + Acc,
- NumBytes1 = NumBytes + 1,
- <<_:Len/binary, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).
-
-merge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->
- merge_msgs(Prev, New, MsgName, []).
-
-merge_msgs(Prev, New, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Names' -> merge_msg_Names(Prev, New, TrUserData);
- 'Package' -> merge_msg_Package(Prev, New, TrUserData)
- end.
-
--compile({nowarn_unused_function,merge_msg_Names/3}).
-merge_msg_Names(#{} = PMsg,
- #{repository := NFrepository} = NMsg, TrUserData) ->
- S1 = #{repository => NFrepository},
- case {PMsg, NMsg} of
- {#{packages := PFpackages},
- #{packages := NFpackages}} ->
- S1#{packages =>
- 'erlang_++'(PFpackages, NFpackages, TrUserData)};
- {_, #{packages := NFpackages}} ->
- S1#{packages => NFpackages};
- {#{packages := PFpackages}, _} ->
- S1#{packages => PFpackages};
- {_, _} -> S1
- end.
-
--compile({nowarn_unused_function,merge_msg_Package/3}).
-merge_msg_Package(#{}, #{name := NFname}, _) ->
- #{name => NFname}.
-
-
-verify_msg(Msg, MsgName) when is_atom(MsgName) ->
- verify_msg(Msg, MsgName, []).
-
-verify_msg(Msg, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Names' -> v_msg_Names(Msg, [MsgName], TrUserData);
- 'Package' -> v_msg_Package(Msg, [MsgName], TrUserData);
- _ -> mk_type_error(not_a_known_message, Msg, [])
- end.
-
-
--compile({nowarn_unused_function,v_msg_Names/3}).
--dialyzer({nowarn_function,v_msg_Names/3}).
-v_msg_Names(#{repository := F2} = M, Path,
- TrUserData) ->
- case M of
- #{packages := F1} ->
- if is_list(F1) ->
- _ = [v_msg_Package(Elem, [packages | Path], TrUserData)
- || Elem <- F1],
- ok;
- true ->
- mk_type_error({invalid_list_of, {msg, 'Package'}}, F1,
- [packages | Path])
- end;
- _ -> ok
- end,
- v_type_string(F2, [repository | Path], TrUserData),
- lists:foreach(fun (packages) -> ok;
- (repository) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Names(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [repository] -- maps:keys(M), 'Names'},
- M, Path);
-v_msg_Names(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Names'}, X, Path).
-
--compile({nowarn_unused_function,v_msg_Package/3}).
--dialyzer({nowarn_function,v_msg_Package/3}).
-v_msg_Package(#{name := F1} = M, Path, TrUserData) ->
- v_type_string(F1, [name | Path], TrUserData),
- lists:foreach(fun (name) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Package(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields, [name] -- maps:keys(M),
- 'Package'},
- M, Path);
-v_msg_Package(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Package'}, X, Path).
-
--compile({nowarn_unused_function,v_type_string/3}).
--dialyzer({nowarn_function,v_type_string/3}).
-v_type_string(S, Path, _TrUserData)
- when is_list(S); is_binary(S) ->
- try unicode:characters_to_binary(S) of
- B when is_binary(B) -> ok;
- {error, _, _} ->
- mk_type_error(bad_unicode_string, S, Path)
- catch
- error:badarg ->
- mk_type_error(bad_unicode_string, S, Path)
- end;
-v_type_string(X, Path, _TrUserData) ->
- mk_type_error(bad_unicode_string, X, Path).
-
--compile({nowarn_unused_function,mk_type_error/3}).
--spec mk_type_error(_, _, list()) -> no_return().
-mk_type_error(Error, ValueSeen, Path) ->
- Path2 = prettify_path(Path),
- erlang:error({gpb_type_error,
- {Error, [{value, ValueSeen}, {path, Path2}]}}).
-
-
--compile({nowarn_unused_function,prettify_path/1}).
--dialyzer({nowarn_function,prettify_path/1}).
-prettify_path([]) -> top_level;
-prettify_path(PathR) ->
- list_to_atom(lists:append(lists:join(".",
- lists:map(fun atom_to_list/1,
- lists:reverse(PathR))))).
-
-
--compile({nowarn_unused_function,id/2}).
--compile({inline,id/2}).
-id(X, _TrUserData) -> X.
-
--compile({nowarn_unused_function,v_ok/3}).
--compile({inline,v_ok/3}).
-v_ok(_Value, _Path, _TrUserData) -> ok.
-
--compile({nowarn_unused_function,m_overwrite/3}).
--compile({inline,m_overwrite/3}).
-m_overwrite(_Prev, New, _TrUserData) -> New.
-
--compile({nowarn_unused_function,cons/3}).
--compile({inline,cons/3}).
-cons(Elem, Acc, _TrUserData) -> [Elem | Acc].
-
--compile({nowarn_unused_function,lists_reverse/2}).
--compile({inline,lists_reverse/2}).
-'lists_reverse'(L, _TrUserData) -> lists:reverse(L).
--compile({nowarn_unused_function,'erlang_++'/3}).
--compile({inline,'erlang_++'/3}).
-'erlang_++'(A, B, _TrUserData) -> A ++ B.
-
-
-get_msg_defs() ->
- [{{msg, 'Names'},
- [#{name => packages, fnum => 1, rnum => 2,
- type => {msg, 'Package'}, occurrence => repeated,
- opts => []},
- #{name => repository, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []}]},
- {{msg, 'Package'},
- [#{name => name, fnum => 1, rnum => 2, type => string,
- occurrence => required, opts => []}]}].
-
-
-get_msg_names() -> ['Names', 'Package'].
-
-
-get_group_names() -> [].
-
-
-get_msg_or_group_names() -> ['Names', 'Package'].
-
-
-get_enum_names() -> [].
-
-
-fetch_msg_def(MsgName) ->
- case find_msg_def(MsgName) of
- Fs when is_list(Fs) -> Fs;
- error -> erlang:error({no_such_msg, MsgName})
- end.
-
-
--spec fetch_enum_def(_) -> no_return().
-fetch_enum_def(EnumName) ->
- erlang:error({no_such_enum, EnumName}).
-
-
-find_msg_def('Names') ->
- [#{name => packages, fnum => 1, rnum => 2,
- type => {msg, 'Package'}, occurrence => repeated,
- opts => []},
- #{name => repository, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []}];
-find_msg_def('Package') ->
- [#{name => name, fnum => 1, rnum => 2, type => string,
- occurrence => required, opts => []}];
-find_msg_def(_) -> error.
-
-
-find_enum_def(_) -> error.
-
-
--spec enum_symbol_by_value(_, _) -> no_return().
-enum_symbol_by_value(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
--spec enum_value_by_symbol(_, _) -> no_return().
-enum_value_by_symbol(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
-
-get_service_names() -> [].
-
-
-get_service_def(_) -> error.
-
-
-get_rpc_names(_) -> error.
-
-
-find_rpc_def(_, _) -> error.
-
-
-
--spec fetch_rpc_def(_, _) -> no_return().
-fetch_rpc_def(ServiceName, RpcName) ->
- erlang:error({no_such_rpc, ServiceName, RpcName}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% as a binary to a service name as an atom.
--spec fqbin_to_service_name(_) -> no_return().
-fqbin_to_service_name(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a service name as an atom to a fully qualified
-%% (ie with package name) name as a binary.
--spec service_name_to_fqbin(_) -> no_return().
-service_name_to_fqbin(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% and an rpc name, both as binaries to a service name and an rpc
-%% name, as atoms.
--spec fqbins_to_service_and_rpc_name(_, _) -> no_return().
-fqbins_to_service_and_rpc_name(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-%% Convert a service name and an rpc name, both as atoms,
-%% to a fully qualified (ie with package name) service name and
-%% an rpc name as binaries.
--spec service_and_rpc_name_to_fqbins(_, _) -> no_return().
-service_and_rpc_name_to_fqbins(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-fqbin_to_msg_name(<<"Names">>) -> 'Names';
-fqbin_to_msg_name(<<"Package">>) -> 'Package';
-fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).
-
-
-msg_name_to_fqbin('Names') -> <<"Names">>;
-msg_name_to_fqbin('Package') -> <<"Package">>;
-msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).
-
-
--spec fqbin_to_enum_name(_) -> no_return().
-fqbin_to_enum_name(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec enum_name_to_fqbin(_) -> no_return().
-enum_name_to_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
-get_package_name() -> undefined.
-
-
-%% Whether or not the message names
-%% are prepended with package name or not.
-uses_packages() -> false.
-
-
-source_basename() -> "r3_hex_pb_names.proto".
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned with extension,
-%% see get_all_proto_names/0 for a version that returns
-%% the basenames sans extension
-get_all_source_basenames() -> ["r3_hex_pb_names.proto"].
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned sans .proto extension,
-%% to make it easier to use them with the various get_xyz_containment
-%% functions.
-get_all_proto_names() -> ["r3_hex_pb_names"].
-
-
-get_msg_containment("r3_hex_pb_names") ->
- ['Names', 'Package'];
-get_msg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_pkg_containment("r3_hex_pb_names") -> undefined;
-get_pkg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_service_containment("r3_hex_pb_names") -> [];
-get_service_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_rpc_containment("r3_hex_pb_names") -> [];
-get_rpc_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_enum_containment("r3_hex_pb_names") -> [];
-get_enum_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_proto_by_msg_name_as_fqbin(<<"Names">>) ->
- "r3_hex_pb_names";
-get_proto_by_msg_name_as_fqbin(<<"Package">>) ->
- "r3_hex_pb_names";
-get_proto_by_msg_name_as_fqbin(E) ->
- error({gpb_error, {badmsg, E}}).
-
-
--spec get_proto_by_service_name_as_fqbin(_) -> no_return().
-get_proto_by_service_name_as_fqbin(E) ->
- error({gpb_error, {badservice, E}}).
-
-
--spec get_proto_by_enum_name_as_fqbin(_) -> no_return().
-get_proto_by_enum_name_as_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec get_protos_by_pkg_name_as_fqbin(_) -> no_return().
-get_protos_by_pkg_name_as_fqbin(E) ->
- error({gpb_error, {badpkg, E}}).
-
-
-
-gpb_version_as_string() ->
- "4.10.0".
-
-gpb_version_as_list() ->
- [4,10,0].
diff --git a/apps/rebar/src/vendored/r3_hex_pb_package.erl b/apps/rebar/src/vendored/r3_hex_pb_package.erl
deleted file mode 100644
index 7d3c72ad..00000000
--- a/apps/rebar/src/vendored/r3_hex_pb_package.erl
+++ /dev/null
@@ -1,1932 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% -*- coding: utf-8 -*-
-%% @private
-%% Automatically generated, do not edit
-%% Generated by gpb_compile version 4.10.0
--module(r3_hex_pb_package).
-
--export([encode_msg/2, encode_msg/3]).
--export([decode_msg/2, decode_msg/3]).
--export([merge_msgs/3, merge_msgs/4]).
--export([verify_msg/2, verify_msg/3]).
--export([get_msg_defs/0]).
--export([get_msg_names/0]).
--export([get_group_names/0]).
--export([get_msg_or_group_names/0]).
--export([get_enum_names/0]).
--export([find_msg_def/1, fetch_msg_def/1]).
--export([find_enum_def/1, fetch_enum_def/1]).
--export([enum_symbol_by_value/2, enum_value_by_symbol/2]).
--export([enum_symbol_by_value_RetirementReason/1, enum_value_by_symbol_RetirementReason/1]).
--export([get_service_names/0]).
--export([get_service_def/1]).
--export([get_rpc_names/1]).
--export([find_rpc_def/2, fetch_rpc_def/2]).
--export([fqbin_to_service_name/1]).
--export([service_name_to_fqbin/1]).
--export([fqbins_to_service_and_rpc_name/2]).
--export([service_and_rpc_name_to_fqbins/2]).
--export([fqbin_to_msg_name/1]).
--export([msg_name_to_fqbin/1]).
--export([fqbin_to_enum_name/1]).
--export([enum_name_to_fqbin/1]).
--export([get_package_name/0]).
--export([uses_packages/0]).
--export([source_basename/0]).
--export([get_all_source_basenames/0]).
--export([get_all_proto_names/0]).
--export([get_msg_containment/1]).
--export([get_pkg_containment/1]).
--export([get_service_containment/1]).
--export([get_rpc_containment/1]).
--export([get_enum_containment/1]).
--export([get_proto_by_msg_name_as_fqbin/1]).
--export([get_proto_by_service_name_as_fqbin/1]).
--export([get_proto_by_enum_name_as_fqbin/1]).
--export([get_protos_by_pkg_name_as_fqbin/1]).
--export([gpb_version_as_string/0, gpb_version_as_list/0]).
-
-
-%% enumerated types
--type 'RetirementReason'() :: 'RETIRED_OTHER' | 'RETIRED_INVALID' | 'RETIRED_SECURITY' | 'RETIRED_DEPRECATED' | 'RETIRED_RENAMED'.
--export_type(['RetirementReason'/0]).
-
-%% message types
--type 'Package'() ::
- #{releases => ['Release'()], % = 1
- name := iodata(), % = 2
- repository := iodata() % = 3
- }.
-
--type 'Release'() ::
- #{version := iodata(), % = 1
- inner_checksum := iodata(), % = 2
- dependencies => ['Dependency'()], % = 3
- retired => 'RetirementStatus'(), % = 4
- outer_checksum => iodata() % = 5
- }.
-
--type 'RetirementStatus'() ::
- #{reason := 'RETIRED_OTHER' | 'RETIRED_INVALID' | 'RETIRED_SECURITY' | 'RETIRED_DEPRECATED' | 'RETIRED_RENAMED' | integer(), % = 1, enum RetirementReason
- message => iodata() % = 2
- }.
-
--type 'Dependency'() ::
- #{package := iodata(), % = 1
- requirement := iodata(), % = 2
- optional => boolean() | 0 | 1, % = 3
- app => iodata(), % = 4
- repository => iodata() % = 5
- }.
-
--export_type(['Package'/0, 'Release'/0, 'RetirementStatus'/0, 'Dependency'/0]).
-
--spec encode_msg('Package'() | 'Release'() | 'RetirementStatus'() | 'Dependency'(), atom()) -> binary().
-encode_msg(Msg, MsgName) when is_atom(MsgName) ->
- encode_msg(Msg, MsgName, []).
-
--spec encode_msg('Package'() | 'Release'() | 'RetirementStatus'() | 'Dependency'(), atom(), list()) -> binary().
-encode_msg(Msg, MsgName, Opts) ->
- verify_msg(Msg, MsgName, Opts),
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Package' ->
- encode_msg_Package(id(Msg, TrUserData), TrUserData);
- 'Release' ->
- encode_msg_Release(id(Msg, TrUserData), TrUserData);
- 'RetirementStatus' ->
- encode_msg_RetirementStatus(id(Msg, TrUserData),
- TrUserData);
- 'Dependency' ->
- encode_msg_Dependency(id(Msg, TrUserData), TrUserData)
- end.
-
-
-encode_msg_Package(Msg, TrUserData) ->
- encode_msg_Package(Msg, <<>>, TrUserData).
-
-
-encode_msg_Package(#{name := F2, repository := F3} = M,
- Bin, TrUserData) ->
- B1 = case M of
- #{releases := F1} ->
- TrF1 = id(F1, TrUserData),
- if TrF1 == [] -> Bin;
- true -> e_field_Package_releases(TrF1, Bin, TrUserData)
- end;
- _ -> Bin
- end,
- B2 = begin
- TrF2 = id(F2, TrUserData),
- e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)
- end,
- begin
- TrF3 = id(F3, TrUserData),
- e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)
- end.
-
-encode_msg_Release(Msg, TrUserData) ->
- encode_msg_Release(Msg, <<>>, TrUserData).
-
-
-encode_msg_Release(#{version := F1,
- inner_checksum := F2} =
- M,
- Bin, TrUserData) ->
- B1 = begin
- TrF1 = id(F1, TrUserData),
- e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
- end,
- B2 = begin
- TrF2 = id(F2, TrUserData),
- e_type_bytes(TrF2, <<B1/binary, 18>>, TrUserData)
- end,
- B3 = case M of
- #{dependencies := F3} ->
- TrF3 = id(F3, TrUserData),
- if TrF3 == [] -> B2;
- true ->
- e_field_Release_dependencies(TrF3, B2, TrUserData)
- end;
- _ -> B2
- end,
- B4 = case M of
- #{retired := F4} ->
- begin
- TrF4 = id(F4, TrUserData),
- e_mfield_Release_retired(TrF4, <<B3/binary, 34>>,
- TrUserData)
- end;
- _ -> B3
- end,
- case M of
- #{outer_checksum := F5} ->
- begin
- TrF5 = id(F5, TrUserData),
- e_type_bytes(TrF5, <<B4/binary, 42>>, TrUserData)
- end;
- _ -> B4
- end.
-
-encode_msg_RetirementStatus(Msg, TrUserData) ->
- encode_msg_RetirementStatus(Msg, <<>>, TrUserData).
-
-
-encode_msg_RetirementStatus(#{reason := F1} = M, Bin,
- TrUserData) ->
- B1 = begin
- TrF1 = id(F1, TrUserData),
- e_enum_RetirementReason(TrF1, <<Bin/binary, 8>>,
- TrUserData)
- end,
- case M of
- #{message := F2} ->
- begin
- TrF2 = id(F2, TrUserData),
- e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)
- end;
- _ -> B1
- end.
-
-encode_msg_Dependency(Msg, TrUserData) ->
- encode_msg_Dependency(Msg, <<>>, TrUserData).
-
-
-encode_msg_Dependency(#{package := F1,
- requirement := F2} =
- M,
- Bin, TrUserData) ->
- B1 = begin
- TrF1 = id(F1, TrUserData),
- e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
- end,
- B2 = begin
- TrF2 = id(F2, TrUserData),
- e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)
- end,
- B3 = case M of
- #{optional := F3} ->
- begin
- TrF3 = id(F3, TrUserData),
- e_type_bool(TrF3, <<B2/binary, 24>>, TrUserData)
- end;
- _ -> B2
- end,
- B4 = case M of
- #{app := F4} ->
- begin
- TrF4 = id(F4, TrUserData),
- e_type_string(TrF4, <<B3/binary, 34>>, TrUserData)
- end;
- _ -> B3
- end,
- case M of
- #{repository := F5} ->
- begin
- TrF5 = id(F5, TrUserData),
- e_type_string(TrF5, <<B4/binary, 42>>, TrUserData)
- end;
- _ -> B4
- end.
-
-e_mfield_Package_releases(Msg, Bin, TrUserData) ->
- SubBin = encode_msg_Release(Msg, <<>>, TrUserData),
- Bin2 = e_varint(byte_size(SubBin), Bin),
- <<Bin2/binary, SubBin/binary>>.
-
-e_field_Package_releases([Elem | Rest], Bin,
- TrUserData) ->
- Bin2 = <<Bin/binary, 10>>,
- Bin3 = e_mfield_Package_releases(id(Elem, TrUserData),
- Bin2, TrUserData),
- e_field_Package_releases(Rest, Bin3, TrUserData);
-e_field_Package_releases([], Bin, _TrUserData) -> Bin.
-
-e_mfield_Release_dependencies(Msg, Bin, TrUserData) ->
- SubBin = encode_msg_Dependency(Msg, <<>>, TrUserData),
- Bin2 = e_varint(byte_size(SubBin), Bin),
- <<Bin2/binary, SubBin/binary>>.
-
-e_field_Release_dependencies([Elem | Rest], Bin,
- TrUserData) ->
- Bin2 = <<Bin/binary, 26>>,
- Bin3 = e_mfield_Release_dependencies(id(Elem,
- TrUserData),
- Bin2, TrUserData),
- e_field_Release_dependencies(Rest, Bin3, TrUserData);
-e_field_Release_dependencies([], Bin, _TrUserData) ->
- Bin.
-
-e_mfield_Release_retired(Msg, Bin, TrUserData) ->
- SubBin = encode_msg_RetirementStatus(Msg, <<>>,
- TrUserData),
- Bin2 = e_varint(byte_size(SubBin), Bin),
- <<Bin2/binary, SubBin/binary>>.
-
-e_enum_RetirementReason('RETIRED_OTHER', Bin,
- _TrUserData) ->
- <<Bin/binary, 0>>;
-e_enum_RetirementReason('RETIRED_INVALID', Bin,
- _TrUserData) ->
- <<Bin/binary, 1>>;
-e_enum_RetirementReason('RETIRED_SECURITY', Bin,
- _TrUserData) ->
- <<Bin/binary, 2>>;
-e_enum_RetirementReason('RETIRED_DEPRECATED', Bin,
- _TrUserData) ->
- <<Bin/binary, 3>>;
-e_enum_RetirementReason('RETIRED_RENAMED', Bin,
- _TrUserData) ->
- <<Bin/binary, 4>>;
-e_enum_RetirementReason(V, Bin, _TrUserData) ->
- e_varint(V, Bin).
-
--compile({nowarn_unused_function,e_type_sint/3}).
-e_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->
- e_varint(Value * 2, Bin);
-e_type_sint(Value, Bin, _TrUserData) ->
- e_varint(Value * -2 - 1, Bin).
-
--compile({nowarn_unused_function,e_type_int32/3}).
-e_type_int32(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int32(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_int64/3}).
-e_type_int64(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int64(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_bool/3}).
-e_type_bool(true, Bin, _TrUserData) ->
- <<Bin/binary, 1>>;
-e_type_bool(false, Bin, _TrUserData) ->
- <<Bin/binary, 0>>;
-e_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;
-e_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.
-
--compile({nowarn_unused_function,e_type_string/3}).
-e_type_string(S, Bin, _TrUserData) ->
- Utf8 = unicode:characters_to_binary(S),
- Bin2 = e_varint(byte_size(Utf8), Bin),
- <<Bin2/binary, Utf8/binary>>.
-
--compile({nowarn_unused_function,e_type_bytes/3}).
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_binary(Bytes) ->
- Bin2 = e_varint(byte_size(Bytes), Bin),
- <<Bin2/binary, Bytes/binary>>;
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_list(Bytes) ->
- BytesBin = iolist_to_binary(Bytes),
- Bin2 = e_varint(byte_size(BytesBin), Bin),
- <<Bin2/binary, BytesBin/binary>>.
-
--compile({nowarn_unused_function,e_type_fixed32/3}).
-e_type_fixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed32/3}).
-e_type_sfixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little-signed>>.
-
--compile({nowarn_unused_function,e_type_fixed64/3}).
-e_type_fixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed64/3}).
-e_type_sfixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little-signed>>.
-
--compile({nowarn_unused_function,e_type_float/3}).
-e_type_float(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:32/little-float>>;
-e_type_float(infinity, Bin, _) ->
- <<Bin/binary, 0:16, 128, 127>>;
-e_type_float('-infinity', Bin, _) ->
- <<Bin/binary, 0:16, 128, 255>>;
-e_type_float(nan, Bin, _) ->
- <<Bin/binary, 0:16, 192, 127>>.
-
--compile({nowarn_unused_function,e_type_double/3}).
-e_type_double(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:64/little-float>>;
-e_type_double(infinity, Bin, _) ->
- <<Bin/binary, 0:48, 240, 127>>;
-e_type_double('-infinity', Bin, _) ->
- <<Bin/binary, 0:48, 240, 255>>;
-e_type_double(nan, Bin, _) ->
- <<Bin/binary, 0:48, 248, 127>>.
-
--compile({nowarn_unused_function,e_varint/3}).
-e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_varint/2}).
-e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
-e_varint(N, Bin) ->
- Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
- e_varint(N bsr 7, Bin2).
-
-
-decode_msg(Bin, MsgName) when is_binary(Bin) ->
- decode_msg(Bin, MsgName, []).
-
-decode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->
- TrUserData = proplists:get_value(user_data, Opts),
- decode_msg_1_catch(Bin, MsgName, TrUserData).
-
--ifdef('OTP_RELEASE').
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--else.
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason ->
- StackTrace = erlang:get_stacktrace(),
- error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--endif.
-
-decode_msg_2_doit('Package', Bin, TrUserData) ->
- id(decode_msg_Package(Bin, TrUserData), TrUserData);
-decode_msg_2_doit('Release', Bin, TrUserData) ->
- id(decode_msg_Release(Bin, TrUserData), TrUserData);
-decode_msg_2_doit('RetirementStatus', Bin,
- TrUserData) ->
- id(decode_msg_RetirementStatus(Bin, TrUserData),
- TrUserData);
-decode_msg_2_doit('Dependency', Bin, TrUserData) ->
- id(decode_msg_Dependency(Bin, TrUserData), TrUserData).
-
-
-
-decode_msg_Package(Bin, TrUserData) ->
- dfp_read_field_def_Package(Bin, 0, 0,
- id([], TrUserData), id('$undef', TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Package(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_releases(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_name(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<26, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_repository(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData);
-dfp_read_field_def_Package(<<>>, 0, 0, R1, F@_2, F@_3,
- TrUserData) ->
- S1 = #{name => F@_2, repository => F@_3},
- if R1 == '$undef' -> S1;
- true -> S1#{releases => lists_reverse(R1, TrUserData)}
- end;
-dfp_read_field_def_Package(Other, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData) ->
- dg_read_field_def_Package(Other, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-dg_read_field_def_Package(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Package(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-dg_read_field_def_Package(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Package_releases(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 18 ->
- d_field_Package_name(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 26 ->
- d_field_Package_repository(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 1 ->
- skip_64_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 2 ->
- skip_length_delimited_Package(Rest, 0, 0, F@_1, F@_2,
- F@_3, TrUserData);
- 3 ->
- skip_group_Package(Rest, Key bsr 3, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 5 ->
- skip_32_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData)
- end
- end;
-dg_read_field_def_Package(<<>>, 0, 0, R1, F@_2, F@_3,
- TrUserData) ->
- S1 = #{name => F@_2, repository => F@_3},
- if R1 == '$undef' -> S1;
- true -> S1#{releases => lists_reverse(R1, TrUserData)}
- end.
-
-d_field_Package_releases(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_releases(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-d_field_Package_releases(<<0:1, X:7, Rest/binary>>, N,
- Acc, Prev, F@_2, F@_3, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bs:Len/binary, Rest2/binary>> = Rest,
- {id(decode_msg_Release(Bs, TrUserData), TrUserData),
- Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0,
- cons(NewFValue, Prev, TrUserData), F@_2, F@_3,
- TrUserData).
-
-d_field_Package_name(<<1:1, X:7, Rest/binary>>, N, Acc,
- F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_name(Rest, N + 7, X bsl N + Acc, F@_1,
- F@_2, F@_3, TrUserData);
-d_field_Package_name(<<0:1, X:7, Rest/binary>>, N, Acc,
- F@_1, _, F@_3, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0, F@_1, NewFValue,
- F@_3, TrUserData).
-
-d_field_Package_repository(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_repository(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-d_field_Package_repository(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0, F@_1, F@_2,
- NewFValue, TrUserData).
-
-skip_varint_Package(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- skip_varint_Package(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-skip_varint_Package(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_length_delimited_Package(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- skip_length_delimited_Package(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData);
-skip_length_delimited_Package(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Package(Rest2, 0, 0, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_group_Package(Bin, FNum, Z2, F@_1, F@_2, F@_3,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Package(Rest, 0, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_32_Package(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_64_Package(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-decode_msg_Release(Bin, TrUserData) ->
- dfp_read_field_def_Release(Bin, 0, 0,
- id('$undef', TrUserData),
- id('$undef', TrUserData), id([], TrUserData),
- id('$undef', TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Release(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Release_version(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
-dfp_read_field_def_Release(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Release_inner_checksum(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Release(<<26, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Release_dependencies(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Release(<<34, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Release_retired(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
-dfp_read_field_def_Release(<<42, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Release_outer_checksum(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Release(<<>>, 0, 0, F@_1, F@_2, R1,
- F@_4, F@_5, TrUserData) ->
- S1 = #{version => F@_1, inner_checksum => F@_2},
- S2 = if R1 == '$undef' -> S1;
- true ->
- S1#{dependencies => lists_reverse(R1, TrUserData)}
- end,
- S3 = if F@_4 == '$undef' -> S2;
- true -> S2#{retired => F@_4}
- end,
- if F@_5 == '$undef' -> S3;
- true -> S3#{outer_checksum => F@_5}
- end;
-dfp_read_field_def_Release(Other, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData) ->
- dg_read_field_def_Release(Other, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-dg_read_field_def_Release(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Release(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-dg_read_field_def_Release(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Release_version(Rest, 0, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 18 ->
- d_field_Release_inner_checksum(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 26 ->
- d_field_Release_dependencies(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 34 ->
- d_field_Release_retired(Rest, 0, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 42 ->
- d_field_Release_outer_checksum(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Release(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData);
- 1 ->
- skip_64_Release(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData);
- 2 ->
- skip_length_delimited_Release(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 3 ->
- skip_group_Release(Rest, Key bsr 3, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 5 ->
- skip_32_Release(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData)
- end
- end;
-dg_read_field_def_Release(<<>>, 0, 0, F@_1, F@_2, R1,
- F@_4, F@_5, TrUserData) ->
- S1 = #{version => F@_1, inner_checksum => F@_2},
- S2 = if R1 == '$undef' -> S1;
- true ->
- S1#{dependencies => lists_reverse(R1, TrUserData)}
- end,
- S3 = if F@_4 == '$undef' -> S2;
- true -> S2#{retired => F@_4}
- end,
- if F@_5 == '$undef' -> S3;
- true -> S3#{outer_checksum => F@_5}
- end.
-
-d_field_Release_version(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Release_version(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Release_version(<<0:1, X:7, Rest/binary>>, N,
- Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Release(RestF, 0, 0, NewFValue, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-d_field_Release_inner_checksum(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Release_inner_checksum(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData);
-d_field_Release_inner_checksum(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Release(RestF, 0, 0, F@_1, NewFValue,
- F@_3, F@_4, F@_5, TrUserData).
-
-d_field_Release_dependencies(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Release_dependencies(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Release_dependencies(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, Prev, F@_4, F@_5,
- TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bs:Len/binary, Rest2/binary>> = Rest,
- {id(decode_msg_Dependency(Bs, TrUserData),
- TrUserData),
- Rest2}
- end,
- dfp_read_field_def_Release(RestF, 0, 0, F@_1, F@_2,
- cons(NewFValue, Prev, TrUserData), F@_4, F@_5,
- TrUserData).
-
-d_field_Release_retired(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Release_retired(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Release_retired(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, Prev, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bs:Len/binary, Rest2/binary>> = Rest,
- {id(decode_msg_RetirementStatus(Bs, TrUserData),
- TrUserData),
- Rest2}
- end,
- dfp_read_field_def_Release(RestF, 0, 0, F@_1, F@_2,
- F@_3,
- if Prev == '$undef' -> NewFValue;
- true ->
- merge_msg_RetirementStatus(Prev,
- NewFValue,
- TrUserData)
- end,
- F@_5, TrUserData).
-
-d_field_Release_outer_checksum(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Release_outer_checksum(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData);
-d_field_Release_outer_checksum(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Release(RestF, 0, 0, F@_1, F@_2,
- F@_3, F@_4, NewFValue, TrUserData).
-
-skip_varint_Release(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- skip_varint_Release(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
-skip_varint_Release(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Release(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_length_delimited_Release(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- skip_length_delimited_Release(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData);
-skip_length_delimited_Release(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Release(Rest2, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_group_Release(Bin, FNum, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Release(Rest, 0, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_32_Release(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Release(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_64_Release(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Release(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-decode_msg_RetirementStatus(Bin, TrUserData) ->
- dfp_read_field_def_RetirementStatus(Bin, 0, 0,
- id('$undef', TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_RetirementStatus(<<8, Rest/binary>>,
- Z1, Z2, F@_1, F@_2, TrUserData) ->
- d_field_RetirementStatus_reason(Rest, Z1, Z2, F@_1,
- F@_2, TrUserData);
-dfp_read_field_def_RetirementStatus(<<18, Rest/binary>>,
- Z1, Z2, F@_1, F@_2, TrUserData) ->
- d_field_RetirementStatus_message(Rest, Z1, Z2, F@_1,
- F@_2, TrUserData);
-dfp_read_field_def_RetirementStatus(<<>>, 0, 0, F@_1,
- F@_2, _) ->
- S1 = #{reason => F@_1},
- if F@_2 == '$undef' -> S1;
- true -> S1#{message => F@_2}
- end;
-dfp_read_field_def_RetirementStatus(Other, Z1, Z2, F@_1,
- F@_2, TrUserData) ->
- dg_read_field_def_RetirementStatus(Other, Z1, Z2, F@_1,
- F@_2, TrUserData).
-
-dg_read_field_def_RetirementStatus(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_RetirementStatus(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, TrUserData);
-dg_read_field_def_RetirementStatus(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 8 ->
- d_field_RetirementStatus_reason(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 18 ->
- d_field_RetirementStatus_message(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_RetirementStatus(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 1 ->
- skip_64_RetirementStatus(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 2 ->
- skip_length_delimited_RetirementStatus(Rest, 0, 0, F@_1,
- F@_2, TrUserData);
- 3 ->
- skip_group_RetirementStatus(Rest, Key bsr 3, 0, F@_1,
- F@_2, TrUserData);
- 5 ->
- skip_32_RetirementStatus(Rest, 0, 0, F@_1, F@_2,
- TrUserData)
- end
- end;
-dg_read_field_def_RetirementStatus(<<>>, 0, 0, F@_1,
- F@_2, _) ->
- S1 = #{reason => F@_1},
- if F@_2 == '$undef' -> S1;
- true -> S1#{message => F@_2}
- end.
-
-d_field_RetirementStatus_reason(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_RetirementStatus_reason(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, TrUserData);
-d_field_RetirementStatus_reason(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, _, F@_2, TrUserData) ->
- {NewFValue, RestF} = {id(d_enum_RetirementReason(begin
- <<Res:32/signed-native>> =
- <<(X bsl N +
- Acc):32/unsigned-native>>,
- id(Res, TrUserData)
- end),
- TrUserData),
- Rest},
- dfp_read_field_def_RetirementStatus(RestF, 0, 0,
- NewFValue, F@_2, TrUserData).
-
-d_field_RetirementStatus_message(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_RetirementStatus_message(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, TrUserData);
-d_field_RetirementStatus_message(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_RetirementStatus(RestF, 0, 0, F@_1,
- NewFValue, TrUserData).
-
-skip_varint_RetirementStatus(<<1:1, _:7, Rest/binary>>,
- Z1, Z2, F@_1, F@_2, TrUserData) ->
- skip_varint_RetirementStatus(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-skip_varint_RetirementStatus(<<0:1, _:7, Rest/binary>>,
- Z1, Z2, F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_RetirementStatus(Rest, Z1, Z2, F@_1,
- F@_2, TrUserData).
-
-skip_length_delimited_RetirementStatus(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- skip_length_delimited_RetirementStatus(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2,
- TrUserData);
-skip_length_delimited_RetirementStatus(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_RetirementStatus(Rest2, 0, 0, F@_1,
- F@_2, TrUserData).
-
-skip_group_RetirementStatus(Bin, FNum, Z2, F@_1, F@_2,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_RetirementStatus(Rest, 0, Z2, F@_1,
- F@_2, TrUserData).
-
-skip_32_RetirementStatus(<<_:32, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_RetirementStatus(Rest, Z1, Z2, F@_1,
- F@_2, TrUserData).
-
-skip_64_RetirementStatus(<<_:64, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_RetirementStatus(Rest, Z1, Z2, F@_1,
- F@_2, TrUserData).
-
-decode_msg_Dependency(Bin, TrUserData) ->
- dfp_read_field_def_Dependency(Bin, 0, 0,
- id('$undef', TrUserData),
- id('$undef', TrUserData),
- id('$undef', TrUserData),
- id('$undef', TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Dependency(<<10, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Dependency_package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Dependency(<<18, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Dependency_requirement(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Dependency(<<24, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Dependency_optional(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Dependency(<<34, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Dependency_app(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
-dfp_read_field_def_Dependency(<<42, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- d_field_Dependency_repository(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
-dfp_read_field_def_Dependency(<<>>, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, _) ->
- S1 = #{package => F@_1, requirement => F@_2},
- S2 = if F@_3 == '$undef' -> S1;
- true -> S1#{optional => F@_3}
- end,
- S3 = if F@_4 == '$undef' -> S2;
- true -> S2#{app => F@_4}
- end,
- if F@_5 == '$undef' -> S3;
- true -> S3#{repository => F@_5}
- end;
-dfp_read_field_def_Dependency(Other, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData) ->
- dg_read_field_def_Dependency(Other, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-dg_read_field_def_Dependency(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Dependency(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-dg_read_field_def_Dependency(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Dependency_package(Rest, 0, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 18 ->
- d_field_Dependency_requirement(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 24 ->
- d_field_Dependency_optional(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 34 ->
- d_field_Dependency_app(Rest, 0, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 42 ->
- d_field_Dependency_repository(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Dependency(Rest, 0, 0, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
- 1 ->
- skip_64_Dependency(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData);
- 2 ->
- skip_length_delimited_Dependency(Rest, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 3 ->
- skip_group_Dependency(Rest, Key bsr 3, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData);
- 5 ->
- skip_32_Dependency(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData)
- end
- end;
-dg_read_field_def_Dependency(<<>>, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, _) ->
- S1 = #{package => F@_1, requirement => F@_2},
- S2 = if F@_3 == '$undef' -> S1;
- true -> S1#{optional => F@_3}
- end,
- S3 = if F@_4 == '$undef' -> S2;
- true -> S2#{app => F@_4}
- end,
- if F@_5 == '$undef' -> S3;
- true -> S3#{repository => F@_5}
- end.
-
-d_field_Dependency_package(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Dependency_package(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Dependency_package(<<0:1, X:7, Rest/binary>>, N,
- Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Dependency(RestF, 0, 0, NewFValue,
- F@_2, F@_3, F@_4, F@_5, TrUserData).
-
-d_field_Dependency_requirement(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Dependency_requirement(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData);
-d_field_Dependency_requirement(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Dependency(RestF, 0, 0, F@_1,
- NewFValue, F@_3, F@_4, F@_5, TrUserData).
-
-d_field_Dependency_optional(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Dependency_optional(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Dependency_optional(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, _, F@_4, F@_5, TrUserData) ->
- {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,
- TrUserData),
- Rest},
- dfp_read_field_def_Dependency(RestF, 0, 0, F@_1, F@_2,
- NewFValue, F@_4, F@_5, TrUserData).
-
-d_field_Dependency_app(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Dependency_app(Rest, N + 7, X bsl N + Acc, F@_1,
- F@_2, F@_3, F@_4, F@_5, TrUserData);
-d_field_Dependency_app(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Dependency(RestF, 0, 0, F@_1, F@_2,
- F@_3, NewFValue, F@_5, TrUserData).
-
-d_field_Dependency_repository(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
- when N < 57 ->
- d_field_Dependency_repository(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData);
-d_field_Dependency_repository(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Dependency(RestF, 0, 0, F@_1, F@_2,
- F@_3, F@_4, NewFValue, TrUserData).
-
-skip_varint_Dependency(<<1:1, _:7, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- skip_varint_Dependency(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData);
-skip_varint_Dependency(<<0:1, _:7, Rest/binary>>, Z1,
- Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Dependency(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_length_delimited_Dependency(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData)
- when N < 57 ->
- skip_length_delimited_Dependency(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,
- F@_5, TrUserData);
-skip_length_delimited_Dependency(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,
- TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Dependency(Rest2, 0, 0, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_group_Dependency(Bin, FNum, Z2, F@_1, F@_2, F@_3,
- F@_4, F@_5, TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Dependency(Rest, 0, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_32_Dependency(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Dependency(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-skip_64_Dependency(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, F@_4, F@_5, TrUserData) ->
- dfp_read_field_def_Dependency(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, F@_4, F@_5, TrUserData).
-
-d_enum_RetirementReason(0) -> 'RETIRED_OTHER';
-d_enum_RetirementReason(1) -> 'RETIRED_INVALID';
-d_enum_RetirementReason(2) -> 'RETIRED_SECURITY';
-d_enum_RetirementReason(3) -> 'RETIRED_DEPRECATED';
-d_enum_RetirementReason(4) -> 'RETIRED_RENAMED';
-d_enum_RetirementReason(V) -> V.
-
-read_group(Bin, FieldNum) ->
- {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),
- <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
- {Group, Rest}.
-
-%% Like skipping over fields, but record the total length,
-%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
-%% Record the length because varints may be non-optimally encoded.
-%%
-%% Groups can be nested, but assume the same FieldNum cannot be nested
-%% because group field numbers are shared with the rest of the fields
-%% numbers. Thus we can search just for an group-end with the same
-%% field number.
-%%
-%% (The only time the same group field number could occur would
-%% be in a nested sub message, but then it would be inside a
-%% length-delimited entry, which we skip-read by length.)
-read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)
- when N < (32-7) ->
- read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);
-read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,
- FieldNum) ->
- Key = X bsl N + Acc,
- TagLen1 = TagLen + 1,
- case {Key bsr 3, Key band 7} of
- {FieldNum, 4} -> % 4 = group_end
- {NumBytes, TagLen1};
- {_, 0} -> % 0 = varint
- read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);
- {_, 1} -> % 1 = bits64
- <<_:64, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);
- {_, 2} -> % 2 = length_delimited
- read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);
- {_, 3} -> % 3 = group_start
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 4} -> % 4 = group_end
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 5} -> % 5 = bits32
- <<_:32, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)
- end.
-
-read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);
-read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->
- read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).
-
-read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);
-read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->
- Len = X bsl N + Acc,
- NumBytes1 = NumBytes + 1,
- <<_:Len/binary, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).
-
-merge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->
- merge_msgs(Prev, New, MsgName, []).
-
-merge_msgs(Prev, New, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Package' -> merge_msg_Package(Prev, New, TrUserData);
- 'Release' -> merge_msg_Release(Prev, New, TrUserData);
- 'RetirementStatus' ->
- merge_msg_RetirementStatus(Prev, New, TrUserData);
- 'Dependency' ->
- merge_msg_Dependency(Prev, New, TrUserData)
- end.
-
--compile({nowarn_unused_function,merge_msg_Package/3}).
-merge_msg_Package(#{} = PMsg,
- #{name := NFname, repository := NFrepository} = NMsg,
- TrUserData) ->
- S1 = #{name => NFname, repository => NFrepository},
- case {PMsg, NMsg} of
- {#{releases := PFreleases},
- #{releases := NFreleases}} ->
- S1#{releases =>
- 'erlang_++'(PFreleases, NFreleases, TrUserData)};
- {_, #{releases := NFreleases}} ->
- S1#{releases => NFreleases};
- {#{releases := PFreleases}, _} ->
- S1#{releases => PFreleases};
- {_, _} -> S1
- end.
-
--compile({nowarn_unused_function,merge_msg_Release/3}).
-merge_msg_Release(#{} = PMsg,
- #{version := NFversion,
- inner_checksum := NFinner_checksum} =
- NMsg,
- TrUserData) ->
- S1 = #{version => NFversion,
- inner_checksum => NFinner_checksum},
- S2 = case {PMsg, NMsg} of
- {#{dependencies := PFdependencies},
- #{dependencies := NFdependencies}} ->
- S1#{dependencies =>
- 'erlang_++'(PFdependencies, NFdependencies,
- TrUserData)};
- {_, #{dependencies := NFdependencies}} ->
- S1#{dependencies => NFdependencies};
- {#{dependencies := PFdependencies}, _} ->
- S1#{dependencies => PFdependencies};
- {_, _} -> S1
- end,
- S3 = case {PMsg, NMsg} of
- {#{retired := PFretired}, #{retired := NFretired}} ->
- S2#{retired =>
- merge_msg_RetirementStatus(PFretired, NFretired,
- TrUserData)};
- {_, #{retired := NFretired}} ->
- S2#{retired => NFretired};
- {#{retired := PFretired}, _} ->
- S2#{retired => PFretired};
- {_, _} -> S2
- end,
- case {PMsg, NMsg} of
- {_, #{outer_checksum := NFouter_checksum}} ->
- S3#{outer_checksum => NFouter_checksum};
- {#{outer_checksum := PFouter_checksum}, _} ->
- S3#{outer_checksum => PFouter_checksum};
- _ -> S3
- end.
-
--compile({nowarn_unused_function,merge_msg_RetirementStatus/3}).
-merge_msg_RetirementStatus(#{} = PMsg,
- #{reason := NFreason} = NMsg, _) ->
- S1 = #{reason => NFreason},
- case {PMsg, NMsg} of
- {_, #{message := NFmessage}} ->
- S1#{message => NFmessage};
- {#{message := PFmessage}, _} ->
- S1#{message => PFmessage};
- _ -> S1
- end.
-
--compile({nowarn_unused_function,merge_msg_Dependency/3}).
-merge_msg_Dependency(#{} = PMsg,
- #{package := NFpackage, requirement := NFrequirement} =
- NMsg,
- _) ->
- S1 = #{package => NFpackage,
- requirement => NFrequirement},
- S2 = case {PMsg, NMsg} of
- {_, #{optional := NFoptional}} ->
- S1#{optional => NFoptional};
- {#{optional := PFoptional}, _} ->
- S1#{optional => PFoptional};
- _ -> S1
- end,
- S3 = case {PMsg, NMsg} of
- {_, #{app := NFapp}} -> S2#{app => NFapp};
- {#{app := PFapp}, _} -> S2#{app => PFapp};
- _ -> S2
- end,
- case {PMsg, NMsg} of
- {_, #{repository := NFrepository}} ->
- S3#{repository => NFrepository};
- {#{repository := PFrepository}, _} ->
- S3#{repository => PFrepository};
- _ -> S3
- end.
-
-
-verify_msg(Msg, MsgName) when is_atom(MsgName) ->
- verify_msg(Msg, MsgName, []).
-
-verify_msg(Msg, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Package' -> v_msg_Package(Msg, [MsgName], TrUserData);
- 'Release' -> v_msg_Release(Msg, [MsgName], TrUserData);
- 'RetirementStatus' ->
- v_msg_RetirementStatus(Msg, [MsgName], TrUserData);
- 'Dependency' ->
- v_msg_Dependency(Msg, [MsgName], TrUserData);
- _ -> mk_type_error(not_a_known_message, Msg, [])
- end.
-
-
--compile({nowarn_unused_function,v_msg_Package/3}).
--dialyzer({nowarn_function,v_msg_Package/3}).
-v_msg_Package(#{name := F2, repository := F3} = M, Path,
- TrUserData) ->
- case M of
- #{releases := F1} ->
- if is_list(F1) ->
- _ = [v_msg_Release(Elem, [releases | Path], TrUserData)
- || Elem <- F1],
- ok;
- true ->
- mk_type_error({invalid_list_of, {msg, 'Release'}}, F1,
- [releases | Path])
- end;
- _ -> ok
- end,
- v_type_string(F2, [name | Path], TrUserData),
- v_type_string(F3, [repository | Path], TrUserData),
- lists:foreach(fun (releases) -> ok;
- (name) -> ok;
- (repository) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Package(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [name, repository] -- maps:keys(M), 'Package'},
- M, Path);
-v_msg_Package(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Package'}, X, Path).
-
--compile({nowarn_unused_function,v_msg_Release/3}).
--dialyzer({nowarn_function,v_msg_Release/3}).
-v_msg_Release(#{version := F1, inner_checksum := F2} =
- M,
- Path, TrUserData) ->
- v_type_string(F1, [version | Path], TrUserData),
- v_type_bytes(F2, [inner_checksum | Path], TrUserData),
- case M of
- #{dependencies := F3} ->
- if is_list(F3) ->
- _ = [v_msg_Dependency(Elem, [dependencies | Path],
- TrUserData)
- || Elem <- F3],
- ok;
- true ->
- mk_type_error({invalid_list_of, {msg, 'Dependency'}},
- F3, [dependencies | Path])
- end;
- _ -> ok
- end,
- case M of
- #{retired := F4} ->
- v_msg_RetirementStatus(F4, [retired | Path],
- TrUserData);
- _ -> ok
- end,
- case M of
- #{outer_checksum := F5} ->
- v_type_bytes(F5, [outer_checksum | Path], TrUserData);
- _ -> ok
- end,
- lists:foreach(fun (version) -> ok;
- (inner_checksum) -> ok;
- (dependencies) -> ok;
- (retired) -> ok;
- (outer_checksum) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Release(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [version, inner_checksum] -- maps:keys(M), 'Release'},
- M, Path);
-v_msg_Release(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Release'}, X, Path).
-
--compile({nowarn_unused_function,v_msg_RetirementStatus/3}).
--dialyzer({nowarn_function,v_msg_RetirementStatus/3}).
-v_msg_RetirementStatus(#{reason := F1} = M, Path,
- TrUserData) ->
- v_enum_RetirementReason(F1, [reason | Path],
- TrUserData),
- case M of
- #{message := F2} ->
- v_type_string(F2, [message | Path], TrUserData);
- _ -> ok
- end,
- lists:foreach(fun (reason) -> ok;
- (message) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_RetirementStatus(M, Path, _TrUserData)
- when is_map(M) ->
- mk_type_error({missing_fields, [reason] -- maps:keys(M),
- 'RetirementStatus'},
- M, Path);
-v_msg_RetirementStatus(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'RetirementStatus'}, X,
- Path).
-
--compile({nowarn_unused_function,v_msg_Dependency/3}).
--dialyzer({nowarn_function,v_msg_Dependency/3}).
-v_msg_Dependency(#{package := F1, requirement := F2} =
- M,
- Path, TrUserData) ->
- v_type_string(F1, [package | Path], TrUserData),
- v_type_string(F2, [requirement | Path], TrUserData),
- case M of
- #{optional := F3} ->
- v_type_bool(F3, [optional | Path], TrUserData);
- _ -> ok
- end,
- case M of
- #{app := F4} ->
- v_type_string(F4, [app | Path], TrUserData);
- _ -> ok
- end,
- case M of
- #{repository := F5} ->
- v_type_string(F5, [repository | Path], TrUserData);
- _ -> ok
- end,
- lists:foreach(fun (package) -> ok;
- (requirement) -> ok;
- (optional) -> ok;
- (app) -> ok;
- (repository) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Dependency(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [package, requirement] -- maps:keys(M), 'Dependency'},
- M, Path);
-v_msg_Dependency(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Dependency'}, X, Path).
-
--compile({nowarn_unused_function,v_enum_RetirementReason/3}).
--dialyzer({nowarn_function,v_enum_RetirementReason/3}).
-v_enum_RetirementReason('RETIRED_OTHER', _Path,
- _TrUserData) ->
- ok;
-v_enum_RetirementReason('RETIRED_INVALID', _Path,
- _TrUserData) ->
- ok;
-v_enum_RetirementReason('RETIRED_SECURITY', _Path,
- _TrUserData) ->
- ok;
-v_enum_RetirementReason('RETIRED_DEPRECATED', _Path,
- _TrUserData) ->
- ok;
-v_enum_RetirementReason('RETIRED_RENAMED', _Path,
- _TrUserData) ->
- ok;
-v_enum_RetirementReason(V, Path, TrUserData)
- when is_integer(V) ->
- v_type_sint32(V, Path, TrUserData);
-v_enum_RetirementReason(X, Path, _TrUserData) ->
- mk_type_error({invalid_enum, 'RetirementReason'}, X,
- Path).
-
--compile({nowarn_unused_function,v_type_sint32/3}).
--dialyzer({nowarn_function,v_type_sint32/3}).
-v_type_sint32(N, _Path, _TrUserData)
- when -2147483648 =< N, N =< 2147483647 ->
- ok;
-v_type_sint32(N, Path, _TrUserData)
- when is_integer(N) ->
- mk_type_error({value_out_of_range, sint32, signed, 32},
- N, Path);
-v_type_sint32(X, Path, _TrUserData) ->
- mk_type_error({bad_integer, sint32, signed, 32}, X,
- Path).
-
--compile({nowarn_unused_function,v_type_bool/3}).
--dialyzer({nowarn_function,v_type_bool/3}).
-v_type_bool(false, _Path, _TrUserData) -> ok;
-v_type_bool(true, _Path, _TrUserData) -> ok;
-v_type_bool(0, _Path, _TrUserData) -> ok;
-v_type_bool(1, _Path, _TrUserData) -> ok;
-v_type_bool(X, Path, _TrUserData) ->
- mk_type_error(bad_boolean_value, X, Path).
-
--compile({nowarn_unused_function,v_type_string/3}).
--dialyzer({nowarn_function,v_type_string/3}).
-v_type_string(S, Path, _TrUserData)
- when is_list(S); is_binary(S) ->
- try unicode:characters_to_binary(S) of
- B when is_binary(B) -> ok;
- {error, _, _} ->
- mk_type_error(bad_unicode_string, S, Path)
- catch
- error:badarg ->
- mk_type_error(bad_unicode_string, S, Path)
- end;
-v_type_string(X, Path, _TrUserData) ->
- mk_type_error(bad_unicode_string, X, Path).
-
--compile({nowarn_unused_function,v_type_bytes/3}).
--dialyzer({nowarn_function,v_type_bytes/3}).
-v_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->
- ok;
-v_type_bytes(B, _Path, _TrUserData) when is_list(B) ->
- ok;
-v_type_bytes(X, Path, _TrUserData) ->
- mk_type_error(bad_binary_value, X, Path).
-
--compile({nowarn_unused_function,mk_type_error/3}).
--spec mk_type_error(_, _, list()) -> no_return().
-mk_type_error(Error, ValueSeen, Path) ->
- Path2 = prettify_path(Path),
- erlang:error({gpb_type_error,
- {Error, [{value, ValueSeen}, {path, Path2}]}}).
-
-
--compile({nowarn_unused_function,prettify_path/1}).
--dialyzer({nowarn_function,prettify_path/1}).
-prettify_path([]) -> top_level;
-prettify_path(PathR) ->
- list_to_atom(lists:append(lists:join(".",
- lists:map(fun atom_to_list/1,
- lists:reverse(PathR))))).
-
-
--compile({nowarn_unused_function,id/2}).
--compile({inline,id/2}).
-id(X, _TrUserData) -> X.
-
--compile({nowarn_unused_function,v_ok/3}).
--compile({inline,v_ok/3}).
-v_ok(_Value, _Path, _TrUserData) -> ok.
-
--compile({nowarn_unused_function,m_overwrite/3}).
--compile({inline,m_overwrite/3}).
-m_overwrite(_Prev, New, _TrUserData) -> New.
-
--compile({nowarn_unused_function,cons/3}).
--compile({inline,cons/3}).
-cons(Elem, Acc, _TrUserData) -> [Elem | Acc].
-
--compile({nowarn_unused_function,lists_reverse/2}).
--compile({inline,lists_reverse/2}).
-'lists_reverse'(L, _TrUserData) -> lists:reverse(L).
--compile({nowarn_unused_function,'erlang_++'/3}).
--compile({inline,'erlang_++'/3}).
-'erlang_++'(A, B, _TrUserData) -> A ++ B.
-
-
-get_msg_defs() ->
- [{{enum, 'RetirementReason'},
- [{'RETIRED_OTHER', 0}, {'RETIRED_INVALID', 1},
- {'RETIRED_SECURITY', 2}, {'RETIRED_DEPRECATED', 3},
- {'RETIRED_RENAMED', 4}]},
- {{msg, 'Package'},
- [#{name => releases, fnum => 1, rnum => 2,
- type => {msg, 'Release'}, occurrence => repeated,
- opts => []},
- #{name => name, fnum => 2, rnum => 3, type => string,
- occurrence => required, opts => []},
- #{name => repository, fnum => 3, rnum => 4,
- type => string, occurrence => required, opts => []}]},
- {{msg, 'Release'},
- [#{name => version, fnum => 1, rnum => 2,
- type => string, occurrence => required, opts => []},
- #{name => inner_checksum, fnum => 2, rnum => 3,
- type => bytes, occurrence => required, opts => []},
- #{name => dependencies, fnum => 3, rnum => 4,
- type => {msg, 'Dependency'}, occurrence => repeated,
- opts => []},
- #{name => retired, fnum => 4, rnum => 5,
- type => {msg, 'RetirementStatus'},
- occurrence => optional, opts => []},
- #{name => outer_checksum, fnum => 5, rnum => 6,
- type => bytes, occurrence => optional, opts => []}]},
- {{msg, 'RetirementStatus'},
- [#{name => reason, fnum => 1, rnum => 2,
- type => {enum, 'RetirementReason'},
- occurrence => required, opts => []},
- #{name => message, fnum => 2, rnum => 3, type => string,
- occurrence => optional, opts => []}]},
- {{msg, 'Dependency'},
- [#{name => package, fnum => 1, rnum => 2,
- type => string, occurrence => required, opts => []},
- #{name => requirement, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []},
- #{name => optional, fnum => 3, rnum => 4, type => bool,
- occurrence => optional, opts => []},
- #{name => app, fnum => 4, rnum => 5, type => string,
- occurrence => optional, opts => []},
- #{name => repository, fnum => 5, rnum => 6,
- type => string, occurrence => optional, opts => []}]}].
-
-
-get_msg_names() ->
- ['Package', 'Release', 'RetirementStatus',
- 'Dependency'].
-
-
-get_group_names() -> [].
-
-
-get_msg_or_group_names() ->
- ['Package', 'Release', 'RetirementStatus',
- 'Dependency'].
-
-
-get_enum_names() -> ['RetirementReason'].
-
-
-fetch_msg_def(MsgName) ->
- case find_msg_def(MsgName) of
- Fs when is_list(Fs) -> Fs;
- error -> erlang:error({no_such_msg, MsgName})
- end.
-
-
-fetch_enum_def(EnumName) ->
- case find_enum_def(EnumName) of
- Es when is_list(Es) -> Es;
- error -> erlang:error({no_such_enum, EnumName})
- end.
-
-
-find_msg_def('Package') ->
- [#{name => releases, fnum => 1, rnum => 2,
- type => {msg, 'Release'}, occurrence => repeated,
- opts => []},
- #{name => name, fnum => 2, rnum => 3, type => string,
- occurrence => required, opts => []},
- #{name => repository, fnum => 3, rnum => 4,
- type => string, occurrence => required, opts => []}];
-find_msg_def('Release') ->
- [#{name => version, fnum => 1, rnum => 2,
- type => string, occurrence => required, opts => []},
- #{name => inner_checksum, fnum => 2, rnum => 3,
- type => bytes, occurrence => required, opts => []},
- #{name => dependencies, fnum => 3, rnum => 4,
- type => {msg, 'Dependency'}, occurrence => repeated,
- opts => []},
- #{name => retired, fnum => 4, rnum => 5,
- type => {msg, 'RetirementStatus'},
- occurrence => optional, opts => []},
- #{name => outer_checksum, fnum => 5, rnum => 6,
- type => bytes, occurrence => optional, opts => []}];
-find_msg_def('RetirementStatus') ->
- [#{name => reason, fnum => 1, rnum => 2,
- type => {enum, 'RetirementReason'},
- occurrence => required, opts => []},
- #{name => message, fnum => 2, rnum => 3, type => string,
- occurrence => optional, opts => []}];
-find_msg_def('Dependency') ->
- [#{name => package, fnum => 1, rnum => 2,
- type => string, occurrence => required, opts => []},
- #{name => requirement, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []},
- #{name => optional, fnum => 3, rnum => 4, type => bool,
- occurrence => optional, opts => []},
- #{name => app, fnum => 4, rnum => 5, type => string,
- occurrence => optional, opts => []},
- #{name => repository, fnum => 5, rnum => 6,
- type => string, occurrence => optional, opts => []}];
-find_msg_def(_) -> error.
-
-
-find_enum_def('RetirementReason') ->
- [{'RETIRED_OTHER', 0}, {'RETIRED_INVALID', 1},
- {'RETIRED_SECURITY', 2}, {'RETIRED_DEPRECATED', 3},
- {'RETIRED_RENAMED', 4}];
-find_enum_def(_) -> error.
-
-
-enum_symbol_by_value('RetirementReason', Value) ->
- enum_symbol_by_value_RetirementReason(Value).
-
-
-enum_value_by_symbol('RetirementReason', Sym) ->
- enum_value_by_symbol_RetirementReason(Sym).
-
-
-enum_symbol_by_value_RetirementReason(0) ->
- 'RETIRED_OTHER';
-enum_symbol_by_value_RetirementReason(1) ->
- 'RETIRED_INVALID';
-enum_symbol_by_value_RetirementReason(2) ->
- 'RETIRED_SECURITY';
-enum_symbol_by_value_RetirementReason(3) ->
- 'RETIRED_DEPRECATED';
-enum_symbol_by_value_RetirementReason(4) ->
- 'RETIRED_RENAMED'.
-
-
-enum_value_by_symbol_RetirementReason('RETIRED_OTHER') ->
- 0;
-enum_value_by_symbol_RetirementReason('RETIRED_INVALID') ->
- 1;
-enum_value_by_symbol_RetirementReason('RETIRED_SECURITY') ->
- 2;
-enum_value_by_symbol_RetirementReason('RETIRED_DEPRECATED') ->
- 3;
-enum_value_by_symbol_RetirementReason('RETIRED_RENAMED') ->
- 4.
-
-
-get_service_names() -> [].
-
-
-get_service_def(_) -> error.
-
-
-get_rpc_names(_) -> error.
-
-
-find_rpc_def(_, _) -> error.
-
-
-
--spec fetch_rpc_def(_, _) -> no_return().
-fetch_rpc_def(ServiceName, RpcName) ->
- erlang:error({no_such_rpc, ServiceName, RpcName}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% as a binary to a service name as an atom.
--spec fqbin_to_service_name(_) -> no_return().
-fqbin_to_service_name(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a service name as an atom to a fully qualified
-%% (ie with package name) name as a binary.
--spec service_name_to_fqbin(_) -> no_return().
-service_name_to_fqbin(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% and an rpc name, both as binaries to a service name and an rpc
-%% name, as atoms.
--spec fqbins_to_service_and_rpc_name(_, _) -> no_return().
-fqbins_to_service_and_rpc_name(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-%% Convert a service name and an rpc name, both as atoms,
-%% to a fully qualified (ie with package name) service name and
-%% an rpc name as binaries.
--spec service_and_rpc_name_to_fqbins(_, _) -> no_return().
-service_and_rpc_name_to_fqbins(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-fqbin_to_msg_name(<<"Package">>) -> 'Package';
-fqbin_to_msg_name(<<"Release">>) -> 'Release';
-fqbin_to_msg_name(<<"RetirementStatus">>) -> 'RetirementStatus';
-fqbin_to_msg_name(<<"Dependency">>) -> 'Dependency';
-fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).
-
-
-msg_name_to_fqbin('Package') -> <<"Package">>;
-msg_name_to_fqbin('Release') -> <<"Release">>;
-msg_name_to_fqbin('RetirementStatus') -> <<"RetirementStatus">>;
-msg_name_to_fqbin('Dependency') -> <<"Dependency">>;
-msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).
-
-
-fqbin_to_enum_name(<<"RetirementReason">>) -> 'RetirementReason';
-fqbin_to_enum_name(E) ->
- error({gpb_error, {badenum, E}}).
-
-
-enum_name_to_fqbin('RetirementReason') -> <<"RetirementReason">>;
-enum_name_to_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
-get_package_name() -> undefined.
-
-
-%% Whether or not the message names
-%% are prepended with package name or not.
-uses_packages() -> false.
-
-
-source_basename() -> "r3_hex_pb_package.proto".
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned with extension,
-%% see get_all_proto_names/0 for a version that returns
-%% the basenames sans extension
-get_all_source_basenames() -> ["r3_hex_pb_package.proto"].
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned sans .proto extension,
-%% to make it easier to use them with the various get_xyz_containment
-%% functions.
-get_all_proto_names() -> ["r3_hex_pb_package"].
-
-
-get_msg_containment("r3_hex_pb_package") ->
- ['Dependency', 'Package', 'Release',
- 'RetirementStatus'];
-get_msg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_pkg_containment("r3_hex_pb_package") -> undefined;
-get_pkg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_service_containment("r3_hex_pb_package") -> [];
-get_service_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_rpc_containment("r3_hex_pb_package") -> [];
-get_rpc_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_enum_containment("r3_hex_pb_package") ->
- ['RetirementReason'];
-get_enum_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_proto_by_msg_name_as_fqbin(<<"RetirementStatus">>) ->
- "r3_hex_pb_package";
-get_proto_by_msg_name_as_fqbin(<<"Release">>) ->
- "r3_hex_pb_package";
-get_proto_by_msg_name_as_fqbin(<<"Package">>) ->
- "r3_hex_pb_package";
-get_proto_by_msg_name_as_fqbin(<<"Dependency">>) ->
- "r3_hex_pb_package";
-get_proto_by_msg_name_as_fqbin(E) ->
- error({gpb_error, {badmsg, E}}).
-
-
--spec get_proto_by_service_name_as_fqbin(_) -> no_return().
-get_proto_by_service_name_as_fqbin(E) ->
- error({gpb_error, {badservice, E}}).
-
-
-get_proto_by_enum_name_as_fqbin(<<"RetirementReason">>) ->
- "r3_hex_pb_package";
-get_proto_by_enum_name_as_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec get_protos_by_pkg_name_as_fqbin(_) -> no_return().
-get_protos_by_pkg_name_as_fqbin(E) ->
- error({gpb_error, {badpkg, E}}).
-
-
-
-gpb_version_as_string() ->
- "4.10.0".
-
-gpb_version_as_list() ->
- [4,10,0].
diff --git a/apps/rebar/src/vendored/r3_hex_pb_signed.erl b/apps/rebar/src/vendored/r3_hex_pb_signed.erl
deleted file mode 100644
index 87645c18..00000000
--- a/apps/rebar/src/vendored/r3_hex_pb_signed.erl
+++ /dev/null
@@ -1,701 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% -*- coding: utf-8 -*-
-%% @private
-%% Automatically generated, do not edit
-%% Generated by gpb_compile version 4.10.0
--module(r3_hex_pb_signed).
-
--export([encode_msg/2, encode_msg/3]).
--export([decode_msg/2, decode_msg/3]).
--export([merge_msgs/3, merge_msgs/4]).
--export([verify_msg/2, verify_msg/3]).
--export([get_msg_defs/0]).
--export([get_msg_names/0]).
--export([get_group_names/0]).
--export([get_msg_or_group_names/0]).
--export([get_enum_names/0]).
--export([find_msg_def/1, fetch_msg_def/1]).
--export([find_enum_def/1, fetch_enum_def/1]).
--export([enum_symbol_by_value/2, enum_value_by_symbol/2]).
--export([get_service_names/0]).
--export([get_service_def/1]).
--export([get_rpc_names/1]).
--export([find_rpc_def/2, fetch_rpc_def/2]).
--export([fqbin_to_service_name/1]).
--export([service_name_to_fqbin/1]).
--export([fqbins_to_service_and_rpc_name/2]).
--export([service_and_rpc_name_to_fqbins/2]).
--export([fqbin_to_msg_name/1]).
--export([msg_name_to_fqbin/1]).
--export([fqbin_to_enum_name/1]).
--export([enum_name_to_fqbin/1]).
--export([get_package_name/0]).
--export([uses_packages/0]).
--export([source_basename/0]).
--export([get_all_source_basenames/0]).
--export([get_all_proto_names/0]).
--export([get_msg_containment/1]).
--export([get_pkg_containment/1]).
--export([get_service_containment/1]).
--export([get_rpc_containment/1]).
--export([get_enum_containment/1]).
--export([get_proto_by_msg_name_as_fqbin/1]).
--export([get_proto_by_service_name_as_fqbin/1]).
--export([get_proto_by_enum_name_as_fqbin/1]).
--export([get_protos_by_pkg_name_as_fqbin/1]).
--export([gpb_version_as_string/0, gpb_version_as_list/0]).
-
-
-%% enumerated types
-
--export_type([]).
-
-%% message types
--type 'Signed'() ::
- #{payload := iodata(), % = 1
- signature => iodata() % = 2
- }.
-
--export_type(['Signed'/0]).
-
--spec encode_msg('Signed'(), atom()) -> binary().
-encode_msg(Msg, MsgName) when is_atom(MsgName) ->
- encode_msg(Msg, MsgName, []).
-
--spec encode_msg('Signed'(), atom(), list()) -> binary().
-encode_msg(Msg, MsgName, Opts) ->
- verify_msg(Msg, MsgName, Opts),
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Signed' ->
- encode_msg_Signed(id(Msg, TrUserData), TrUserData)
- end.
-
-
-encode_msg_Signed(Msg, TrUserData) ->
- encode_msg_Signed(Msg, <<>>, TrUserData).
-
-
-encode_msg_Signed(#{payload := F1} = M, Bin,
- TrUserData) ->
- B1 = begin
- TrF1 = id(F1, TrUserData),
- e_type_bytes(TrF1, <<Bin/binary, 10>>, TrUserData)
- end,
- case M of
- #{signature := F2} ->
- begin
- TrF2 = id(F2, TrUserData),
- e_type_bytes(TrF2, <<B1/binary, 18>>, TrUserData)
- end;
- _ -> B1
- end.
-
--compile({nowarn_unused_function,e_type_sint/3}).
-e_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->
- e_varint(Value * 2, Bin);
-e_type_sint(Value, Bin, _TrUserData) ->
- e_varint(Value * -2 - 1, Bin).
-
--compile({nowarn_unused_function,e_type_int32/3}).
-e_type_int32(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int32(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_int64/3}).
-e_type_int64(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int64(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_bool/3}).
-e_type_bool(true, Bin, _TrUserData) ->
- <<Bin/binary, 1>>;
-e_type_bool(false, Bin, _TrUserData) ->
- <<Bin/binary, 0>>;
-e_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;
-e_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.
-
--compile({nowarn_unused_function,e_type_string/3}).
-e_type_string(S, Bin, _TrUserData) ->
- Utf8 = unicode:characters_to_binary(S),
- Bin2 = e_varint(byte_size(Utf8), Bin),
- <<Bin2/binary, Utf8/binary>>.
-
--compile({nowarn_unused_function,e_type_bytes/3}).
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_binary(Bytes) ->
- Bin2 = e_varint(byte_size(Bytes), Bin),
- <<Bin2/binary, Bytes/binary>>;
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_list(Bytes) ->
- BytesBin = iolist_to_binary(Bytes),
- Bin2 = e_varint(byte_size(BytesBin), Bin),
- <<Bin2/binary, BytesBin/binary>>.
-
--compile({nowarn_unused_function,e_type_fixed32/3}).
-e_type_fixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed32/3}).
-e_type_sfixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little-signed>>.
-
--compile({nowarn_unused_function,e_type_fixed64/3}).
-e_type_fixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed64/3}).
-e_type_sfixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little-signed>>.
-
--compile({nowarn_unused_function,e_type_float/3}).
-e_type_float(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:32/little-float>>;
-e_type_float(infinity, Bin, _) ->
- <<Bin/binary, 0:16, 128, 127>>;
-e_type_float('-infinity', Bin, _) ->
- <<Bin/binary, 0:16, 128, 255>>;
-e_type_float(nan, Bin, _) ->
- <<Bin/binary, 0:16, 192, 127>>.
-
--compile({nowarn_unused_function,e_type_double/3}).
-e_type_double(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:64/little-float>>;
-e_type_double(infinity, Bin, _) ->
- <<Bin/binary, 0:48, 240, 127>>;
-e_type_double('-infinity', Bin, _) ->
- <<Bin/binary, 0:48, 240, 255>>;
-e_type_double(nan, Bin, _) ->
- <<Bin/binary, 0:48, 248, 127>>.
-
--compile({nowarn_unused_function,e_varint/3}).
-e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_varint/2}).
-e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
-e_varint(N, Bin) ->
- Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
- e_varint(N bsr 7, Bin2).
-
-
-decode_msg(Bin, MsgName) when is_binary(Bin) ->
- decode_msg(Bin, MsgName, []).
-
-decode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->
- TrUserData = proplists:get_value(user_data, Opts),
- decode_msg_1_catch(Bin, MsgName, TrUserData).
-
--ifdef('OTP_RELEASE').
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--else.
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason ->
- StackTrace = erlang:get_stacktrace(),
- error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--endif.
-
-decode_msg_2_doit('Signed', Bin, TrUserData) ->
- id(decode_msg_Signed(Bin, TrUserData), TrUserData).
-
-
-
-decode_msg_Signed(Bin, TrUserData) ->
- dfp_read_field_def_Signed(Bin, 0, 0,
- id('$undef', TrUserData),
- id('$undef', TrUserData), TrUserData).
-
-dfp_read_field_def_Signed(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Signed_payload(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Signed(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Signed_signature(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Signed(<<>>, 0, 0, F@_1, F@_2, _) ->
- S1 = #{payload => F@_1},
- if F@_2 == '$undef' -> S1;
- true -> S1#{signature => F@_2}
- end;
-dfp_read_field_def_Signed(Other, Z1, Z2, F@_1, F@_2,
- TrUserData) ->
- dg_read_field_def_Signed(Other, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-dg_read_field_def_Signed(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Signed(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-dg_read_field_def_Signed(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Signed_payload(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 18 ->
- d_field_Signed_signature(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Signed(Rest, 0, 0, F@_1, F@_2, TrUserData);
- 1 -> skip_64_Signed(Rest, 0, 0, F@_1, F@_2, TrUserData);
- 2 ->
- skip_length_delimited_Signed(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 3 ->
- skip_group_Signed(Rest, Key bsr 3, 0, F@_1, F@_2,
- TrUserData);
- 5 -> skip_32_Signed(Rest, 0, 0, F@_1, F@_2, TrUserData)
- end
- end;
-dg_read_field_def_Signed(<<>>, 0, 0, F@_1, F@_2, _) ->
- S1 = #{payload => F@_1},
- if F@_2 == '$undef' -> S1;
- true -> S1#{signature => F@_2}
- end.
-
-d_field_Signed_payload(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Signed_payload(Rest, N + 7, X bsl N + Acc, F@_1,
- F@_2, TrUserData);
-d_field_Signed_payload(<<0:1, X:7, Rest/binary>>, N,
- Acc, _, F@_2, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Signed(RestF, 0, 0, NewFValue, F@_2,
- TrUserData).
-
-d_field_Signed_signature(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Signed_signature(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-d_field_Signed_signature(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Signed(RestF, 0, 0, F@_1, NewFValue,
- TrUserData).
-
-skip_varint_Signed(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- skip_varint_Signed(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-skip_varint_Signed(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_Signed(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_length_delimited_Signed(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- skip_length_delimited_Signed(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-skip_length_delimited_Signed(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Signed(Rest2, 0, 0, F@_1, F@_2,
- TrUserData).
-
-skip_group_Signed(Bin, FNum, Z2, F@_1, F@_2,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Signed(Rest, 0, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_32_Signed(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, TrUserData) ->
- dfp_read_field_def_Signed(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_64_Signed(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, TrUserData) ->
- dfp_read_field_def_Signed(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-read_group(Bin, FieldNum) ->
- {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),
- <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
- {Group, Rest}.
-
-%% Like skipping over fields, but record the total length,
-%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
-%% Record the length because varints may be non-optimally encoded.
-%%
-%% Groups can be nested, but assume the same FieldNum cannot be nested
-%% because group field numbers are shared with the rest of the fields
-%% numbers. Thus we can search just for an group-end with the same
-%% field number.
-%%
-%% (The only time the same group field number could occur would
-%% be in a nested sub message, but then it would be inside a
-%% length-delimited entry, which we skip-read by length.)
-read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)
- when N < (32-7) ->
- read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);
-read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,
- FieldNum) ->
- Key = X bsl N + Acc,
- TagLen1 = TagLen + 1,
- case {Key bsr 3, Key band 7} of
- {FieldNum, 4} -> % 4 = group_end
- {NumBytes, TagLen1};
- {_, 0} -> % 0 = varint
- read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);
- {_, 1} -> % 1 = bits64
- <<_:64, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);
- {_, 2} -> % 2 = length_delimited
- read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);
- {_, 3} -> % 3 = group_start
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 4} -> % 4 = group_end
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 5} -> % 5 = bits32
- <<_:32, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)
- end.
-
-read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);
-read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->
- read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).
-
-read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);
-read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->
- Len = X bsl N + Acc,
- NumBytes1 = NumBytes + 1,
- <<_:Len/binary, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).
-
-merge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->
- merge_msgs(Prev, New, MsgName, []).
-
-merge_msgs(Prev, New, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Signed' -> merge_msg_Signed(Prev, New, TrUserData)
- end.
-
--compile({nowarn_unused_function,merge_msg_Signed/3}).
-merge_msg_Signed(#{} = PMsg,
- #{payload := NFpayload} = NMsg, _) ->
- S1 = #{payload => NFpayload},
- case {PMsg, NMsg} of
- {_, #{signature := NFsignature}} ->
- S1#{signature => NFsignature};
- {#{signature := PFsignature}, _} ->
- S1#{signature => PFsignature};
- _ -> S1
- end.
-
-
-verify_msg(Msg, MsgName) when is_atom(MsgName) ->
- verify_msg(Msg, MsgName, []).
-
-verify_msg(Msg, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Signed' -> v_msg_Signed(Msg, [MsgName], TrUserData);
- _ -> mk_type_error(not_a_known_message, Msg, [])
- end.
-
-
--compile({nowarn_unused_function,v_msg_Signed/3}).
--dialyzer({nowarn_function,v_msg_Signed/3}).
-v_msg_Signed(#{payload := F1} = M, Path, TrUserData) ->
- v_type_bytes(F1, [payload | Path], TrUserData),
- case M of
- #{signature := F2} ->
- v_type_bytes(F2, [signature | Path], TrUserData);
- _ -> ok
- end,
- lists:foreach(fun (payload) -> ok;
- (signature) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Signed(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [payload] -- maps:keys(M), 'Signed'},
- M, Path);
-v_msg_Signed(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Signed'}, X, Path).
-
--compile({nowarn_unused_function,v_type_bytes/3}).
--dialyzer({nowarn_function,v_type_bytes/3}).
-v_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->
- ok;
-v_type_bytes(B, _Path, _TrUserData) when is_list(B) ->
- ok;
-v_type_bytes(X, Path, _TrUserData) ->
- mk_type_error(bad_binary_value, X, Path).
-
--compile({nowarn_unused_function,mk_type_error/3}).
--spec mk_type_error(_, _, list()) -> no_return().
-mk_type_error(Error, ValueSeen, Path) ->
- Path2 = prettify_path(Path),
- erlang:error({gpb_type_error,
- {Error, [{value, ValueSeen}, {path, Path2}]}}).
-
-
--compile({nowarn_unused_function,prettify_path/1}).
--dialyzer({nowarn_function,prettify_path/1}).
-prettify_path([]) -> top_level;
-prettify_path(PathR) ->
- list_to_atom(lists:append(lists:join(".",
- lists:map(fun atom_to_list/1,
- lists:reverse(PathR))))).
-
-
--compile({nowarn_unused_function,id/2}).
--compile({inline,id/2}).
-id(X, _TrUserData) -> X.
-
--compile({nowarn_unused_function,v_ok/3}).
--compile({inline,v_ok/3}).
-v_ok(_Value, _Path, _TrUserData) -> ok.
-
--compile({nowarn_unused_function,m_overwrite/3}).
--compile({inline,m_overwrite/3}).
-m_overwrite(_Prev, New, _TrUserData) -> New.
-
--compile({nowarn_unused_function,cons/3}).
--compile({inline,cons/3}).
-cons(Elem, Acc, _TrUserData) -> [Elem | Acc].
-
--compile({nowarn_unused_function,lists_reverse/2}).
--compile({inline,lists_reverse/2}).
-'lists_reverse'(L, _TrUserData) -> lists:reverse(L).
--compile({nowarn_unused_function,'erlang_++'/3}).
--compile({inline,'erlang_++'/3}).
-'erlang_++'(A, B, _TrUserData) -> A ++ B.
-
-
-get_msg_defs() ->
- [{{msg, 'Signed'},
- [#{name => payload, fnum => 1, rnum => 2, type => bytes,
- occurrence => required, opts => []},
- #{name => signature, fnum => 2, rnum => 3,
- type => bytes, occurrence => optional, opts => []}]}].
-
-
-get_msg_names() -> ['Signed'].
-
-
-get_group_names() -> [].
-
-
-get_msg_or_group_names() -> ['Signed'].
-
-
-get_enum_names() -> [].
-
-
-fetch_msg_def(MsgName) ->
- case find_msg_def(MsgName) of
- Fs when is_list(Fs) -> Fs;
- error -> erlang:error({no_such_msg, MsgName})
- end.
-
-
--spec fetch_enum_def(_) -> no_return().
-fetch_enum_def(EnumName) ->
- erlang:error({no_such_enum, EnumName}).
-
-
-find_msg_def('Signed') ->
- [#{name => payload, fnum => 1, rnum => 2, type => bytes,
- occurrence => required, opts => []},
- #{name => signature, fnum => 2, rnum => 3,
- type => bytes, occurrence => optional, opts => []}];
-find_msg_def(_) -> error.
-
-
-find_enum_def(_) -> error.
-
-
--spec enum_symbol_by_value(_, _) -> no_return().
-enum_symbol_by_value(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
--spec enum_value_by_symbol(_, _) -> no_return().
-enum_value_by_symbol(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
-
-get_service_names() -> [].
-
-
-get_service_def(_) -> error.
-
-
-get_rpc_names(_) -> error.
-
-
-find_rpc_def(_, _) -> error.
-
-
-
--spec fetch_rpc_def(_, _) -> no_return().
-fetch_rpc_def(ServiceName, RpcName) ->
- erlang:error({no_such_rpc, ServiceName, RpcName}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% as a binary to a service name as an atom.
--spec fqbin_to_service_name(_) -> no_return().
-fqbin_to_service_name(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a service name as an atom to a fully qualified
-%% (ie with package name) name as a binary.
--spec service_name_to_fqbin(_) -> no_return().
-service_name_to_fqbin(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% and an rpc name, both as binaries to a service name and an rpc
-%% name, as atoms.
--spec fqbins_to_service_and_rpc_name(_, _) -> no_return().
-fqbins_to_service_and_rpc_name(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-%% Convert a service name and an rpc name, both as atoms,
-%% to a fully qualified (ie with package name) service name and
-%% an rpc name as binaries.
--spec service_and_rpc_name_to_fqbins(_, _) -> no_return().
-service_and_rpc_name_to_fqbins(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-fqbin_to_msg_name(<<"Signed">>) -> 'Signed';
-fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).
-
-
-msg_name_to_fqbin('Signed') -> <<"Signed">>;
-msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).
-
-
--spec fqbin_to_enum_name(_) -> no_return().
-fqbin_to_enum_name(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec enum_name_to_fqbin(_) -> no_return().
-enum_name_to_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
-get_package_name() -> undefined.
-
-
-%% Whether or not the message names
-%% are prepended with package name or not.
-uses_packages() -> false.
-
-
-source_basename() -> "r3_hex_pb_signed.proto".
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned with extension,
-%% see get_all_proto_names/0 for a version that returns
-%% the basenames sans extension
-get_all_source_basenames() -> ["r3_hex_pb_signed.proto"].
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned sans .proto extension,
-%% to make it easier to use them with the various get_xyz_containment
-%% functions.
-get_all_proto_names() -> ["r3_hex_pb_signed"].
-
-
-get_msg_containment("r3_hex_pb_signed") -> ['Signed'];
-get_msg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_pkg_containment("r3_hex_pb_signed") -> undefined;
-get_pkg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_service_containment("r3_hex_pb_signed") -> [];
-get_service_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_rpc_containment("r3_hex_pb_signed") -> [];
-get_rpc_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_enum_containment("r3_hex_pb_signed") -> [];
-get_enum_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_proto_by_msg_name_as_fqbin(<<"Signed">>) ->
- "r3_hex_pb_signed";
-get_proto_by_msg_name_as_fqbin(E) ->
- error({gpb_error, {badmsg, E}}).
-
-
--spec get_proto_by_service_name_as_fqbin(_) -> no_return().
-get_proto_by_service_name_as_fqbin(E) ->
- error({gpb_error, {badservice, E}}).
-
-
--spec get_proto_by_enum_name_as_fqbin(_) -> no_return().
-get_proto_by_enum_name_as_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec get_protos_by_pkg_name_as_fqbin(_) -> no_return().
-get_protos_by_pkg_name_as_fqbin(E) ->
- error({gpb_error, {badpkg, E}}).
-
-
-
-gpb_version_as_string() ->
- "4.10.0".
-
-gpb_version_as_list() ->
- [4,10,0].
diff --git a/apps/rebar/src/vendored/r3_hex_pb_versions.erl b/apps/rebar/src/vendored/r3_hex_pb_versions.erl
deleted file mode 100644
index f86f02a3..00000000
--- a/apps/rebar/src/vendored/r3_hex_pb_versions.erl
+++ /dev/null
@@ -1,1102 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%% -*- coding: utf-8 -*-
-%% @private
-%% Automatically generated, do not edit
-%% Generated by gpb_compile version 4.10.0
--module(r3_hex_pb_versions).
-
--export([encode_msg/2, encode_msg/3]).
--export([decode_msg/2, decode_msg/3]).
--export([merge_msgs/3, merge_msgs/4]).
--export([verify_msg/2, verify_msg/3]).
--export([get_msg_defs/0]).
--export([get_msg_names/0]).
--export([get_group_names/0]).
--export([get_msg_or_group_names/0]).
--export([get_enum_names/0]).
--export([find_msg_def/1, fetch_msg_def/1]).
--export([find_enum_def/1, fetch_enum_def/1]).
--export([enum_symbol_by_value/2, enum_value_by_symbol/2]).
--export([get_service_names/0]).
--export([get_service_def/1]).
--export([get_rpc_names/1]).
--export([find_rpc_def/2, fetch_rpc_def/2]).
--export([fqbin_to_service_name/1]).
--export([service_name_to_fqbin/1]).
--export([fqbins_to_service_and_rpc_name/2]).
--export([service_and_rpc_name_to_fqbins/2]).
--export([fqbin_to_msg_name/1]).
--export([msg_name_to_fqbin/1]).
--export([fqbin_to_enum_name/1]).
--export([enum_name_to_fqbin/1]).
--export([get_package_name/0]).
--export([uses_packages/0]).
--export([source_basename/0]).
--export([get_all_source_basenames/0]).
--export([get_all_proto_names/0]).
--export([get_msg_containment/1]).
--export([get_pkg_containment/1]).
--export([get_service_containment/1]).
--export([get_rpc_containment/1]).
--export([get_enum_containment/1]).
--export([get_proto_by_msg_name_as_fqbin/1]).
--export([get_proto_by_service_name_as_fqbin/1]).
--export([get_proto_by_enum_name_as_fqbin/1]).
--export([get_protos_by_pkg_name_as_fqbin/1]).
--export([gpb_version_as_string/0, gpb_version_as_list/0]).
-
-
-%% enumerated types
-
--export_type([]).
-
-%% message types
--type 'Versions'() ::
- #{packages => ['Package'()], % = 1
- repository := iodata() % = 2
- }.
-
--type 'Package'() ::
- #{name := iodata(), % = 1
- versions => [iodata()], % = 2
- retired => [integer()] % = 3, 32 bits
- }.
-
--export_type(['Versions'/0, 'Package'/0]).
-
--spec encode_msg('Versions'() | 'Package'(), atom()) -> binary().
-encode_msg(Msg, MsgName) when is_atom(MsgName) ->
- encode_msg(Msg, MsgName, []).
-
--spec encode_msg('Versions'() | 'Package'(), atom(), list()) -> binary().
-encode_msg(Msg, MsgName, Opts) ->
- verify_msg(Msg, MsgName, Opts),
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Versions' ->
- encode_msg_Versions(id(Msg, TrUserData), TrUserData);
- 'Package' ->
- encode_msg_Package(id(Msg, TrUserData), TrUserData)
- end.
-
-
-encode_msg_Versions(Msg, TrUserData) ->
- encode_msg_Versions(Msg, <<>>, TrUserData).
-
-
-encode_msg_Versions(#{repository := F2} = M, Bin,
- TrUserData) ->
- B1 = case M of
- #{packages := F1} ->
- TrF1 = id(F1, TrUserData),
- if TrF1 == [] -> Bin;
- true -> e_field_Versions_packages(TrF1, Bin, TrUserData)
- end;
- _ -> Bin
- end,
- begin
- TrF2 = id(F2, TrUserData),
- e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)
- end.
-
-encode_msg_Package(Msg, TrUserData) ->
- encode_msg_Package(Msg, <<>>, TrUserData).
-
-
-encode_msg_Package(#{name := F1} = M, Bin,
- TrUserData) ->
- B1 = begin
- TrF1 = id(F1, TrUserData),
- e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
- end,
- B2 = case M of
- #{versions := F2} ->
- TrF2 = id(F2, TrUserData),
- if TrF2 == [] -> B1;
- true -> e_field_Package_versions(TrF2, B1, TrUserData)
- end;
- _ -> B1
- end,
- case M of
- #{retired := F3} ->
- TrF3 = id(F3, TrUserData),
- if TrF3 == [] -> B2;
- true -> e_field_Package_retired(TrF3, B2, TrUserData)
- end;
- _ -> B2
- end.
-
-e_mfield_Versions_packages(Msg, Bin, TrUserData) ->
- SubBin = encode_msg_Package(Msg, <<>>, TrUserData),
- Bin2 = e_varint(byte_size(SubBin), Bin),
- <<Bin2/binary, SubBin/binary>>.
-
-e_field_Versions_packages([Elem | Rest], Bin,
- TrUserData) ->
- Bin2 = <<Bin/binary, 10>>,
- Bin3 = e_mfield_Versions_packages(id(Elem, TrUserData),
- Bin2, TrUserData),
- e_field_Versions_packages(Rest, Bin3, TrUserData);
-e_field_Versions_packages([], Bin, _TrUserData) -> Bin.
-
-e_field_Package_versions([Elem | Rest], Bin,
- TrUserData) ->
- Bin2 = <<Bin/binary, 18>>,
- Bin3 = e_type_string(id(Elem, TrUserData), Bin2,
- TrUserData),
- e_field_Package_versions(Rest, Bin3, TrUserData);
-e_field_Package_versions([], Bin, _TrUserData) -> Bin.
-
-e_field_Package_retired(Elems, Bin, TrUserData)
- when Elems =/= [] ->
- SubBin = e_pfield_Package_retired(Elems, <<>>,
- TrUserData),
- Bin2 = <<Bin/binary, 26>>,
- Bin3 = e_varint(byte_size(SubBin), Bin2),
- <<Bin3/binary, SubBin/binary>>;
-e_field_Package_retired([], Bin, _TrUserData) -> Bin.
-
-e_pfield_Package_retired([Value | Rest], Bin,
- TrUserData) ->
- Bin2 = e_type_int32(id(Value, TrUserData), Bin,
- TrUserData),
- e_pfield_Package_retired(Rest, Bin2, TrUserData);
-e_pfield_Package_retired([], Bin, _TrUserData) -> Bin.
-
--compile({nowarn_unused_function,e_type_sint/3}).
-e_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->
- e_varint(Value * 2, Bin);
-e_type_sint(Value, Bin, _TrUserData) ->
- e_varint(Value * -2 - 1, Bin).
-
--compile({nowarn_unused_function,e_type_int32/3}).
-e_type_int32(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int32(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_int64/3}).
-e_type_int64(Value, Bin, _TrUserData)
- when 0 =< Value, Value =< 127 ->
- <<Bin/binary, Value>>;
-e_type_int64(Value, Bin, _TrUserData) ->
- <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
- e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_type_bool/3}).
-e_type_bool(true, Bin, _TrUserData) ->
- <<Bin/binary, 1>>;
-e_type_bool(false, Bin, _TrUserData) ->
- <<Bin/binary, 0>>;
-e_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;
-e_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.
-
--compile({nowarn_unused_function,e_type_string/3}).
-e_type_string(S, Bin, _TrUserData) ->
- Utf8 = unicode:characters_to_binary(S),
- Bin2 = e_varint(byte_size(Utf8), Bin),
- <<Bin2/binary, Utf8/binary>>.
-
--compile({nowarn_unused_function,e_type_bytes/3}).
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_binary(Bytes) ->
- Bin2 = e_varint(byte_size(Bytes), Bin),
- <<Bin2/binary, Bytes/binary>>;
-e_type_bytes(Bytes, Bin, _TrUserData)
- when is_list(Bytes) ->
- BytesBin = iolist_to_binary(Bytes),
- Bin2 = e_varint(byte_size(BytesBin), Bin),
- <<Bin2/binary, BytesBin/binary>>.
-
--compile({nowarn_unused_function,e_type_fixed32/3}).
-e_type_fixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed32/3}).
-e_type_sfixed32(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:32/little-signed>>.
-
--compile({nowarn_unused_function,e_type_fixed64/3}).
-e_type_fixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little>>.
-
--compile({nowarn_unused_function,e_type_sfixed64/3}).
-e_type_sfixed64(Value, Bin, _TrUserData) ->
- <<Bin/binary, Value:64/little-signed>>.
-
--compile({nowarn_unused_function,e_type_float/3}).
-e_type_float(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:32/little-float>>;
-e_type_float(infinity, Bin, _) ->
- <<Bin/binary, 0:16, 128, 127>>;
-e_type_float('-infinity', Bin, _) ->
- <<Bin/binary, 0:16, 128, 255>>;
-e_type_float(nan, Bin, _) ->
- <<Bin/binary, 0:16, 192, 127>>.
-
--compile({nowarn_unused_function,e_type_double/3}).
-e_type_double(V, Bin, _) when is_number(V) ->
- <<Bin/binary, V:64/little-float>>;
-e_type_double(infinity, Bin, _) ->
- <<Bin/binary, 0:48, 240, 127>>;
-e_type_double('-infinity', Bin, _) ->
- <<Bin/binary, 0:48, 240, 255>>;
-e_type_double(nan, Bin, _) ->
- <<Bin/binary, 0:48, 248, 127>>.
-
--compile({nowarn_unused_function,e_varint/3}).
-e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).
-
--compile({nowarn_unused_function,e_varint/2}).
-e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
-e_varint(N, Bin) ->
- Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
- e_varint(N bsr 7, Bin2).
-
-
-decode_msg(Bin, MsgName) when is_binary(Bin) ->
- decode_msg(Bin, MsgName, []).
-
-decode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->
- TrUserData = proplists:get_value(user_data, Opts),
- decode_msg_1_catch(Bin, MsgName, TrUserData).
-
--ifdef('OTP_RELEASE').
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--else.
-decode_msg_1_catch(Bin, MsgName, TrUserData) ->
- try decode_msg_2_doit(MsgName, Bin, TrUserData)
- catch Class:Reason ->
- StackTrace = erlang:get_stacktrace(),
- error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
- end.
--endif.
-
-decode_msg_2_doit('Versions', Bin, TrUserData) ->
- id(decode_msg_Versions(Bin, TrUserData), TrUserData);
-decode_msg_2_doit('Package', Bin, TrUserData) ->
- id(decode_msg_Package(Bin, TrUserData), TrUserData).
-
-
-
-decode_msg_Versions(Bin, TrUserData) ->
- dfp_read_field_def_Versions(Bin, 0, 0,
- id([], TrUserData), id('$undef', TrUserData),
- TrUserData).
-
-dfp_read_field_def_Versions(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Versions_packages(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Versions(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- d_field_Versions_repository(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-dfp_read_field_def_Versions(<<>>, 0, 0, R1, F@_2,
- TrUserData) ->
- S1 = #{repository => F@_2},
- if R1 == '$undef' -> S1;
- true -> S1#{packages => lists_reverse(R1, TrUserData)}
- end;
-dfp_read_field_def_Versions(Other, Z1, Z2, F@_1, F@_2,
- TrUserData) ->
- dg_read_field_def_Versions(Other, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-dg_read_field_def_Versions(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Versions(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-dg_read_field_def_Versions(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Versions_packages(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 18 ->
- d_field_Versions_repository(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Versions(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 1 ->
- skip_64_Versions(Rest, 0, 0, F@_1, F@_2, TrUserData);
- 2 ->
- skip_length_delimited_Versions(Rest, 0, 0, F@_1, F@_2,
- TrUserData);
- 3 ->
- skip_group_Versions(Rest, Key bsr 3, 0, F@_1, F@_2,
- TrUserData);
- 5 ->
- skip_32_Versions(Rest, 0, 0, F@_1, F@_2, TrUserData)
- end
- end;
-dg_read_field_def_Versions(<<>>, 0, 0, R1, F@_2,
- TrUserData) ->
- S1 = #{repository => F@_2},
- if R1 == '$undef' -> S1;
- true -> S1#{packages => lists_reverse(R1, TrUserData)}
- end.
-
-d_field_Versions_packages(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Versions_packages(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-d_field_Versions_packages(<<0:1, X:7, Rest/binary>>, N,
- Acc, Prev, F@_2, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bs:Len/binary, Rest2/binary>> = Rest,
- {id(decode_msg_Package(Bs, TrUserData), TrUserData),
- Rest2}
- end,
- dfp_read_field_def_Versions(RestF, 0, 0,
- cons(NewFValue, Prev, TrUserData), F@_2,
- TrUserData).
-
-d_field_Versions_repository(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- d_field_Versions_repository(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, TrUserData);
-d_field_Versions_repository(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, _, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Versions(RestF, 0, 0, F@_1,
- NewFValue, TrUserData).
-
-skip_varint_Versions(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- skip_varint_Versions(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData);
-skip_varint_Versions(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, TrUserData) ->
- dfp_read_field_def_Versions(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_length_delimited_Versions(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData)
- when N < 57 ->
- skip_length_delimited_Versions(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, TrUserData);
-skip_length_delimited_Versions(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, F@_1, F@_2, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Versions(Rest2, 0, 0, F@_1, F@_2,
- TrUserData).
-
-skip_group_Versions(Bin, FNum, Z2, F@_1, F@_2,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Versions(Rest, 0, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_32_Versions(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, TrUserData) ->
- dfp_read_field_def_Versions(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-skip_64_Versions(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, TrUserData) ->
- dfp_read_field_def_Versions(Rest, Z1, Z2, F@_1, F@_2,
- TrUserData).
-
-decode_msg_Package(Bin, TrUserData) ->
- dfp_read_field_def_Package(Bin, 0, 0,
- id('$undef', TrUserData), id([], TrUserData),
- id([], TrUserData), TrUserData).
-
-dfp_read_field_def_Package(<<10, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_name(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<18, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_versions(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<26, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_pfield_Package_retired(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<24, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- d_field_Package_retired(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-dfp_read_field_def_Package(<<>>, 0, 0, F@_1, R1, R2,
- TrUserData) ->
- #{name => F@_1,
- versions => lists_reverse(R1, TrUserData),
- retired => lists_reverse(R2, TrUserData)};
-dfp_read_field_def_Package(Other, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData) ->
- dg_read_field_def_Package(Other, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-dg_read_field_def_Package(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 32 - 7 ->
- dg_read_field_def_Package(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-dg_read_field_def_Package(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData) ->
- Key = X bsl N + Acc,
- case Key of
- 10 ->
- d_field_Package_name(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 18 ->
- d_field_Package_versions(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 26 ->
- d_pfield_Package_retired(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 24 ->
- d_field_Package_retired(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- _ ->
- case Key band 7 of
- 0 ->
- skip_varint_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 1 ->
- skip_64_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 2 ->
- skip_length_delimited_Package(Rest, 0, 0, F@_1, F@_2,
- F@_3, TrUserData);
- 3 ->
- skip_group_Package(Rest, Key bsr 3, 0, F@_1, F@_2, F@_3,
- TrUserData);
- 5 ->
- skip_32_Package(Rest, 0, 0, F@_1, F@_2, F@_3,
- TrUserData)
- end
- end;
-dg_read_field_def_Package(<<>>, 0, 0, F@_1, R1, R2,
- TrUserData) ->
- #{name => F@_1,
- versions => lists_reverse(R1, TrUserData),
- retired => lists_reverse(R2, TrUserData)}.
-
-d_field_Package_name(<<1:1, X:7, Rest/binary>>, N, Acc,
- F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_name(Rest, N + 7, X bsl N + Acc, F@_1,
- F@_2, F@_3, TrUserData);
-d_field_Package_name(<<0:1, X:7, Rest/binary>>, N, Acc,
- _, F@_2, F@_3, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0, NewFValue, F@_2,
- F@_3, TrUserData).
-
-d_field_Package_versions(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_versions(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-d_field_Package_versions(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, Prev, F@_3, TrUserData) ->
- {NewFValue, RestF} = begin
- Len = X bsl N + Acc,
- <<Bytes:Len/binary, Rest2/binary>> = Rest,
- {id(binary:copy(Bytes), TrUserData), Rest2}
- end,
- dfp_read_field_def_Package(RestF, 0, 0, F@_1,
- cons(NewFValue, Prev, TrUserData), F@_3,
- TrUserData).
-
-d_field_Package_retired(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_field_Package_retired(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-d_field_Package_retired(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, Prev, TrUserData) ->
- {NewFValue, RestF} = {begin
- <<Res:32/signed-native>> = <<(X bsl N +
- Acc):32/unsigned-native>>,
- id(Res, TrUserData)
- end,
- Rest},
- dfp_read_field_def_Package(RestF, 0, 0, F@_1, F@_2,
- cons(NewFValue, Prev, TrUserData), TrUserData).
-
-d_pfield_Package_retired(<<1:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- d_pfield_Package_retired(Rest, N + 7, X bsl N + Acc,
- F@_1, F@_2, F@_3, TrUserData);
-d_pfield_Package_retired(<<0:1, X:7, Rest/binary>>, N,
- Acc, F@_1, F@_2, E, TrUserData) ->
- Len = X bsl N + Acc,
- <<PackedBytes:Len/binary, Rest2/binary>> = Rest,
- NewSeq = d_packed_field_Package_retired(PackedBytes, 0,
- 0, E, TrUserData),
- dfp_read_field_def_Package(Rest2, 0, 0, F@_1, F@_2,
- NewSeq, TrUserData).
-
-d_packed_field_Package_retired(<<1:1, X:7,
- Rest/binary>>,
- N, Acc, AccSeq, TrUserData)
- when N < 57 ->
- d_packed_field_Package_retired(Rest, N + 7,
- X bsl N + Acc, AccSeq, TrUserData);
-d_packed_field_Package_retired(<<0:1, X:7,
- Rest/binary>>,
- N, Acc, AccSeq, TrUserData) ->
- {NewFValue, RestF} = {begin
- <<Res:32/signed-native>> = <<(X bsl N +
- Acc):32/unsigned-native>>,
- id(Res, TrUserData)
- end,
- Rest},
- d_packed_field_Package_retired(RestF, 0, 0,
- [NewFValue | AccSeq], TrUserData);
-d_packed_field_Package_retired(<<>>, 0, 0, AccSeq, _) ->
- AccSeq.
-
-skip_varint_Package(<<1:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- skip_varint_Package(Rest, Z1, Z2, F@_1, F@_2, F@_3,
- TrUserData);
-skip_varint_Package(<<0:1, _:7, Rest/binary>>, Z1, Z2,
- F@_1, F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_length_delimited_Package(<<1:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, TrUserData)
- when N < 57 ->
- skip_length_delimited_Package(Rest, N + 7,
- X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData);
-skip_length_delimited_Package(<<0:1, X:7, Rest/binary>>,
- N, Acc, F@_1, F@_2, F@_3, TrUserData) ->
- Length = X bsl N + Acc,
- <<_:Length/binary, Rest2/binary>> = Rest,
- dfp_read_field_def_Package(Rest2, 0, 0, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_group_Package(Bin, FNum, Z2, F@_1, F@_2, F@_3,
- TrUserData) ->
- {_, Rest} = read_group(Bin, FNum),
- dfp_read_field_def_Package(Rest, 0, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_32_Package(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-skip_64_Package(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
- F@_2, F@_3, TrUserData) ->
- dfp_read_field_def_Package(Rest, Z1, Z2, F@_1, F@_2,
- F@_3, TrUserData).
-
-read_group(Bin, FieldNum) ->
- {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),
- <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
- {Group, Rest}.
-
-%% Like skipping over fields, but record the total length,
-%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
-%% Record the length because varints may be non-optimally encoded.
-%%
-%% Groups can be nested, but assume the same FieldNum cannot be nested
-%% because group field numbers are shared with the rest of the fields
-%% numbers. Thus we can search just for an group-end with the same
-%% field number.
-%%
-%% (The only time the same group field number could occur would
-%% be in a nested sub message, but then it would be inside a
-%% length-delimited entry, which we skip-read by length.)
-read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)
- when N < (32-7) ->
- read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);
-read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,
- FieldNum) ->
- Key = X bsl N + Acc,
- TagLen1 = TagLen + 1,
- case {Key bsr 3, Key band 7} of
- {FieldNum, 4} -> % 4 = group_end
- {NumBytes, TagLen1};
- {_, 0} -> % 0 = varint
- read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);
- {_, 1} -> % 1 = bits64
- <<_:64, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);
- {_, 2} -> % 2 = length_delimited
- read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);
- {_, 3} -> % 3 = group_start
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 4} -> % 4 = group_end
- read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
- {_, 5} -> % 5 = bits32
- <<_:32, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)
- end.
-
-read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);
-read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->
- read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).
-
-read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)
- when N < (64-7) ->
- read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);
-read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->
- Len = X bsl N + Acc,
- NumBytes1 = NumBytes + 1,
- <<_:Len/binary, Tl2/binary>> = Tl,
- read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).
-
-merge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->
- merge_msgs(Prev, New, MsgName, []).
-
-merge_msgs(Prev, New, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Versions' -> merge_msg_Versions(Prev, New, TrUserData);
- 'Package' -> merge_msg_Package(Prev, New, TrUserData)
- end.
-
--compile({nowarn_unused_function,merge_msg_Versions/3}).
-merge_msg_Versions(#{} = PMsg,
- #{repository := NFrepository} = NMsg, TrUserData) ->
- S1 = #{repository => NFrepository},
- case {PMsg, NMsg} of
- {#{packages := PFpackages},
- #{packages := NFpackages}} ->
- S1#{packages =>
- 'erlang_++'(PFpackages, NFpackages, TrUserData)};
- {_, #{packages := NFpackages}} ->
- S1#{packages => NFpackages};
- {#{packages := PFpackages}, _} ->
- S1#{packages => PFpackages};
- {_, _} -> S1
- end.
-
--compile({nowarn_unused_function,merge_msg_Package/3}).
-merge_msg_Package(#{} = PMsg, #{name := NFname} = NMsg,
- TrUserData) ->
- S1 = #{name => NFname},
- S2 = case {PMsg, NMsg} of
- {#{versions := PFversions},
- #{versions := NFversions}} ->
- S1#{versions =>
- 'erlang_++'(PFversions, NFversions, TrUserData)};
- {_, #{versions := NFversions}} ->
- S1#{versions => NFversions};
- {#{versions := PFversions}, _} ->
- S1#{versions => PFversions};
- {_, _} -> S1
- end,
- case {PMsg, NMsg} of
- {#{retired := PFretired}, #{retired := NFretired}} ->
- S2#{retired =>
- 'erlang_++'(PFretired, NFretired, TrUserData)};
- {_, #{retired := NFretired}} ->
- S2#{retired => NFretired};
- {#{retired := PFretired}, _} ->
- S2#{retired => PFretired};
- {_, _} -> S2
- end.
-
-
-verify_msg(Msg, MsgName) when is_atom(MsgName) ->
- verify_msg(Msg, MsgName, []).
-
-verify_msg(Msg, MsgName, Opts) ->
- TrUserData = proplists:get_value(user_data, Opts),
- case MsgName of
- 'Versions' ->
- v_msg_Versions(Msg, [MsgName], TrUserData);
- 'Package' -> v_msg_Package(Msg, [MsgName], TrUserData);
- _ -> mk_type_error(not_a_known_message, Msg, [])
- end.
-
-
--compile({nowarn_unused_function,v_msg_Versions/3}).
--dialyzer({nowarn_function,v_msg_Versions/3}).
-v_msg_Versions(#{repository := F2} = M, Path,
- TrUserData) ->
- case M of
- #{packages := F1} ->
- if is_list(F1) ->
- _ = [v_msg_Package(Elem, [packages | Path], TrUserData)
- || Elem <- F1],
- ok;
- true ->
- mk_type_error({invalid_list_of, {msg, 'Package'}}, F1,
- [packages | Path])
- end;
- _ -> ok
- end,
- v_type_string(F2, [repository | Path], TrUserData),
- lists:foreach(fun (packages) -> ok;
- (repository) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Versions(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields,
- [repository] -- maps:keys(M), 'Versions'},
- M, Path);
-v_msg_Versions(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Versions'}, X, Path).
-
--compile({nowarn_unused_function,v_msg_Package/3}).
--dialyzer({nowarn_function,v_msg_Package/3}).
-v_msg_Package(#{name := F1} = M, Path, TrUserData) ->
- v_type_string(F1, [name | Path], TrUserData),
- case M of
- #{versions := F2} ->
- if is_list(F2) ->
- _ = [v_type_string(Elem, [versions | Path], TrUserData)
- || Elem <- F2],
- ok;
- true ->
- mk_type_error({invalid_list_of, string}, F2,
- [versions | Path])
- end;
- _ -> ok
- end,
- case M of
- #{retired := F3} ->
- if is_list(F3) ->
- _ = [v_type_int32(Elem, [retired | Path], TrUserData)
- || Elem <- F3],
- ok;
- true ->
- mk_type_error({invalid_list_of, int32}, F3,
- [retired | Path])
- end;
- _ -> ok
- end,
- lists:foreach(fun (name) -> ok;
- (versions) -> ok;
- (retired) -> ok;
- (OtherKey) ->
- mk_type_error({extraneous_key, OtherKey}, M, Path)
- end,
- maps:keys(M)),
- ok;
-v_msg_Package(M, Path, _TrUserData) when is_map(M) ->
- mk_type_error({missing_fields, [name] -- maps:keys(M),
- 'Package'},
- M, Path);
-v_msg_Package(X, Path, _TrUserData) ->
- mk_type_error({expected_msg, 'Package'}, X, Path).
-
--compile({nowarn_unused_function,v_type_int32/3}).
--dialyzer({nowarn_function,v_type_int32/3}).
-v_type_int32(N, _Path, _TrUserData)
- when -2147483648 =< N, N =< 2147483647 ->
- ok;
-v_type_int32(N, Path, _TrUserData) when is_integer(N) ->
- mk_type_error({value_out_of_range, int32, signed, 32},
- N, Path);
-v_type_int32(X, Path, _TrUserData) ->
- mk_type_error({bad_integer, int32, signed, 32}, X,
- Path).
-
--compile({nowarn_unused_function,v_type_string/3}).
--dialyzer({nowarn_function,v_type_string/3}).
-v_type_string(S, Path, _TrUserData)
- when is_list(S); is_binary(S) ->
- try unicode:characters_to_binary(S) of
- B when is_binary(B) -> ok;
- {error, _, _} ->
- mk_type_error(bad_unicode_string, S, Path)
- catch
- error:badarg ->
- mk_type_error(bad_unicode_string, S, Path)
- end;
-v_type_string(X, Path, _TrUserData) ->
- mk_type_error(bad_unicode_string, X, Path).
-
--compile({nowarn_unused_function,mk_type_error/3}).
--spec mk_type_error(_, _, list()) -> no_return().
-mk_type_error(Error, ValueSeen, Path) ->
- Path2 = prettify_path(Path),
- erlang:error({gpb_type_error,
- {Error, [{value, ValueSeen}, {path, Path2}]}}).
-
-
--compile({nowarn_unused_function,prettify_path/1}).
--dialyzer({nowarn_function,prettify_path/1}).
-prettify_path([]) -> top_level;
-prettify_path(PathR) ->
- list_to_atom(lists:append(lists:join(".",
- lists:map(fun atom_to_list/1,
- lists:reverse(PathR))))).
-
-
--compile({nowarn_unused_function,id/2}).
--compile({inline,id/2}).
-id(X, _TrUserData) -> X.
-
--compile({nowarn_unused_function,v_ok/3}).
--compile({inline,v_ok/3}).
-v_ok(_Value, _Path, _TrUserData) -> ok.
-
--compile({nowarn_unused_function,m_overwrite/3}).
--compile({inline,m_overwrite/3}).
-m_overwrite(_Prev, New, _TrUserData) -> New.
-
--compile({nowarn_unused_function,cons/3}).
--compile({inline,cons/3}).
-cons(Elem, Acc, _TrUserData) -> [Elem | Acc].
-
--compile({nowarn_unused_function,lists_reverse/2}).
--compile({inline,lists_reverse/2}).
-'lists_reverse'(L, _TrUserData) -> lists:reverse(L).
--compile({nowarn_unused_function,'erlang_++'/3}).
--compile({inline,'erlang_++'/3}).
-'erlang_++'(A, B, _TrUserData) -> A ++ B.
-
-
-get_msg_defs() ->
- [{{msg, 'Versions'},
- [#{name => packages, fnum => 1, rnum => 2,
- type => {msg, 'Package'}, occurrence => repeated,
- opts => []},
- #{name => repository, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []}]},
- {{msg, 'Package'},
- [#{name => name, fnum => 1, rnum => 2, type => string,
- occurrence => required, opts => []},
- #{name => versions, fnum => 2, rnum => 3,
- type => string, occurrence => repeated, opts => []},
- #{name => retired, fnum => 3, rnum => 4, type => int32,
- occurrence => repeated, opts => [packed]}]}].
-
-
-get_msg_names() -> ['Versions', 'Package'].
-
-
-get_group_names() -> [].
-
-
-get_msg_or_group_names() -> ['Versions', 'Package'].
-
-
-get_enum_names() -> [].
-
-
-fetch_msg_def(MsgName) ->
- case find_msg_def(MsgName) of
- Fs when is_list(Fs) -> Fs;
- error -> erlang:error({no_such_msg, MsgName})
- end.
-
-
--spec fetch_enum_def(_) -> no_return().
-fetch_enum_def(EnumName) ->
- erlang:error({no_such_enum, EnumName}).
-
-
-find_msg_def('Versions') ->
- [#{name => packages, fnum => 1, rnum => 2,
- type => {msg, 'Package'}, occurrence => repeated,
- opts => []},
- #{name => repository, fnum => 2, rnum => 3,
- type => string, occurrence => required, opts => []}];
-find_msg_def('Package') ->
- [#{name => name, fnum => 1, rnum => 2, type => string,
- occurrence => required, opts => []},
- #{name => versions, fnum => 2, rnum => 3,
- type => string, occurrence => repeated, opts => []},
- #{name => retired, fnum => 3, rnum => 4, type => int32,
- occurrence => repeated, opts => [packed]}];
-find_msg_def(_) -> error.
-
-
-find_enum_def(_) -> error.
-
-
--spec enum_symbol_by_value(_, _) -> no_return().
-enum_symbol_by_value(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
--spec enum_value_by_symbol(_, _) -> no_return().
-enum_value_by_symbol(E, V) ->
- erlang:error({no_enum_defs, E, V}).
-
-
-
-get_service_names() -> [].
-
-
-get_service_def(_) -> error.
-
-
-get_rpc_names(_) -> error.
-
-
-find_rpc_def(_, _) -> error.
-
-
-
--spec fetch_rpc_def(_, _) -> no_return().
-fetch_rpc_def(ServiceName, RpcName) ->
- erlang:error({no_such_rpc, ServiceName, RpcName}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% as a binary to a service name as an atom.
--spec fqbin_to_service_name(_) -> no_return().
-fqbin_to_service_name(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a service name as an atom to a fully qualified
-%% (ie with package name) name as a binary.
--spec service_name_to_fqbin(_) -> no_return().
-service_name_to_fqbin(X) ->
- error({gpb_error, {badservice, X}}).
-
-
-%% Convert a a fully qualified (ie with package name) service name
-%% and an rpc name, both as binaries to a service name and an rpc
-%% name, as atoms.
--spec fqbins_to_service_and_rpc_name(_, _) -> no_return().
-fqbins_to_service_and_rpc_name(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-%% Convert a service name and an rpc name, both as atoms,
-%% to a fully qualified (ie with package name) service name and
-%% an rpc name as binaries.
--spec service_and_rpc_name_to_fqbins(_, _) -> no_return().
-service_and_rpc_name_to_fqbins(S, R) ->
- error({gpb_error, {badservice_or_rpc, {S, R}}}).
-
-
-fqbin_to_msg_name(<<"Versions">>) -> 'Versions';
-fqbin_to_msg_name(<<"Package">>) -> 'Package';
-fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).
-
-
-msg_name_to_fqbin('Versions') -> <<"Versions">>;
-msg_name_to_fqbin('Package') -> <<"Package">>;
-msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).
-
-
--spec fqbin_to_enum_name(_) -> no_return().
-fqbin_to_enum_name(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec enum_name_to_fqbin(_) -> no_return().
-enum_name_to_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
-get_package_name() -> undefined.
-
-
-%% Whether or not the message names
-%% are prepended with package name or not.
-uses_packages() -> false.
-
-
-source_basename() -> "r3_hex_pb_versions.proto".
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned with extension,
-%% see get_all_proto_names/0 for a version that returns
-%% the basenames sans extension
-get_all_source_basenames() -> ["r3_hex_pb_versions.proto"].
-
-
-%% Retrieve all proto file names, also imported ones.
-%% The order is top-down. The first element is always the main
-%% source file. The files are returned sans .proto extension,
-%% to make it easier to use them with the various get_xyz_containment
-%% functions.
-get_all_proto_names() -> ["r3_hex_pb_versions"].
-
-
-get_msg_containment("r3_hex_pb_versions") ->
- ['Package', 'Versions'];
-get_msg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_pkg_containment("r3_hex_pb_versions") -> undefined;
-get_pkg_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_service_containment("r3_hex_pb_versions") -> [];
-get_service_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_rpc_containment("r3_hex_pb_versions") -> [];
-get_rpc_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_enum_containment("r3_hex_pb_versions") -> [];
-get_enum_containment(P) ->
- error({gpb_error, {badproto, P}}).
-
-
-get_proto_by_msg_name_as_fqbin(<<"Versions">>) ->
- "r3_hex_pb_versions";
-get_proto_by_msg_name_as_fqbin(<<"Package">>) ->
- "r3_hex_pb_versions";
-get_proto_by_msg_name_as_fqbin(E) ->
- error({gpb_error, {badmsg, E}}).
-
-
--spec get_proto_by_service_name_as_fqbin(_) -> no_return().
-get_proto_by_service_name_as_fqbin(E) ->
- error({gpb_error, {badservice, E}}).
-
-
--spec get_proto_by_enum_name_as_fqbin(_) -> no_return().
-get_proto_by_enum_name_as_fqbin(E) ->
- error({gpb_error, {badenum, E}}).
-
-
--spec get_protos_by_pkg_name_as_fqbin(_) -> no_return().
-get_protos_by_pkg_name_as_fqbin(E) ->
- error({gpb_error, {badpkg, E}}).
-
-
-
-gpb_version_as_string() ->
- "4.10.0".
-
-gpb_version_as_list() ->
- [4,10,0].
diff --git a/apps/rebar/src/vendored/r3_hex_registry.erl b/apps/rebar/src/vendored/r3_hex_registry.erl
deleted file mode 100644
index 6c5ae3c9..00000000
--- a/apps/rebar/src/vendored/r3_hex_registry.erl
+++ /dev/null
@@ -1,133 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_registry).
--export([
- encode_names/1,
- decode_names/2,
- encode_versions/1,
- decode_versions/2,
- encode_package/1,
- decode_package/3,
- sign_protobuf/2,
- decode_signed/1,
- decode_and_verify_signed/2,
- sign/2,
- verify/3
-]).
--include_lib("public_key/include/public_key.hrl").
-
--type private_key() :: #'RSAPrivateKey'{} | binary().
--type public_key() :: #'RSAPublicKey'{} | binary().
-
-%%====================================================================
-%% API functions
-%%====================================================================
-
-%% @doc
-%% Encode Names message.
-encode_names(Names) ->
- r3_hex_pb_names:encode_msg(Names, 'Names').
-
-%% @doc
-%% Decode message created with encode_names/1.
-decode_names(Payload, no_verify) ->
- #{packages := Packages} = r3_hex_pb_names:decode_msg(Payload, 'Names'),
- {ok, Packages};
-
-decode_names(Payload, Repository) ->
- case r3_hex_pb_names:decode_msg(Payload, 'Names') of
- #{repository := Repository, packages := Packages} ->
- {ok, Packages};
- _ ->
- {error, unverified}
- end.
-
-%% @doc
-%% Encode Versions message.
-encode_versions(Versions) ->
- r3_hex_pb_versions:encode_msg(Versions, 'Versions').
-
-%% @doc
-%% Decode message created with encode_versions/1.
-decode_versions(Payload, no_verify) ->
- #{packages := Packages} = r3_hex_pb_versions:decode_msg(Payload, 'Versions'),
- {ok, Packages};
-
-decode_versions(Payload, Repository) ->
- case r3_hex_pb_versions:decode_msg(Payload, 'Versions') of
- #{repository := Repository, packages := Packages} ->
- {ok, Packages};
- _ ->
- {error, unverified}
- end.
-
-%% @doc
-%% Encode Package message.
-encode_package(Package) ->
- r3_hex_pb_package:encode_msg(Package, 'Package').
-
-%% @doc
-%% Decode message created with encode_package/1.
-decode_package(Payload, no_verify, no_verify) ->
- #{releases := Releases} = r3_hex_pb_package:decode_msg(Payload, 'Package'),
- {ok, Releases};
-
-decode_package(Payload, Repository, Package) ->
- case r3_hex_pb_package:decode_msg(Payload, 'Package') of
- #{repository := Repository, name := Package, releases := Releases} ->
- {ok, Releases};
- _ ->
- {error, unverified}
- end.
-
-%% @doc
-%% Encode Signed message.
-sign_protobuf(Payload, PrivateKey) ->
- Signature = sign(Payload, PrivateKey),
- r3_hex_pb_signed:encode_msg(#{payload => Payload, signature => Signature}, 'Signed').
-
-%% @doc
-%% Decode message created with sign_protobuf/2 without verification.
-decode_signed(Signed) ->
- r3_hex_pb_signed:decode_msg(Signed, 'Signed').
-
-%% @doc
-%% Decode message created with sign_protobuf/2 and verify it against public key.
--spec decode_and_verify_signed(binary(), public_key()) -> {ok, binary()} | {error, term()}.
-decode_and_verify_signed(Signed, PublicKey) ->
- #{payload := Payload, signature := Signature} = decode_signed(Signed),
- case verify(Payload, Signature, PublicKey) of
- true -> {ok, Payload};
- false -> {error, unverified};
- {error, Reason} -> {error, Reason}
- end.
-
-%% @doc
-%% Signs binary with given private key.
--spec sign(binary(), private_key()) -> binary().
-sign(Binary, PrivateKey) ->
- {ok, RSAPrivateKey} = key(PrivateKey),
- public_key:sign(Binary, sha512, RSAPrivateKey).
-
-%% @doc
-%% Verifies binary against signature and a public key.
--spec verify(binary(), binary(), public_key()) -> boolean() | {error, term()}.
-verify(Binary, Signature, PublicKey) ->
- case key(PublicKey) of
- {ok, RSAPublicKey} -> public_key:verify(Binary, sha512, Signature, RSAPublicKey);
- {error, Reason} -> {error, Reason}
- end.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-key(#'RSAPublicKey'{} = Key) ->
- {ok, Key};
-key(#'RSAPrivateKey'{} = Key) ->
- {ok, Key};
-key(Binary) when is_binary(Binary) ->
- case public_key:pem_decode(Binary) of
- [Entry | _] -> {ok, public_key:pem_entry_decode(Entry)};
- _ -> {error, bad_key}
- end.
diff --git a/apps/rebar/src/vendored/r3_hex_repo.erl b/apps/rebar/src/vendored/r3_hex_repo.erl
deleted file mode 100644
index 50c7b11f..00000000
--- a/apps/rebar/src/vendored/r3_hex_repo.erl
+++ /dev/null
@@ -1,176 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_repo).
--export([
- get_names/1,
- get_versions/1,
- get_package/2,
- get_tarball/3
-]).
-
-%%====================================================================
-%% API functions
-%%====================================================================
-
-%% @doc
-%% Gets names resource from the repository.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_repo:get_names(r3_hex_core:default_config()).
-%% {ok, {200, ...,
-%% [
-%% #{name => <<"package1">>},
-%% #{name => <<"package2">>},
-%% ]}}
-%% '''
-%% @end
-get_names(Config) when is_map(Config) ->
- Verify = maps:get(repo_verify_origin, Config, true),
- Decoder = fun(Data) ->
- case Verify of
- true -> r3_hex_registry:decode_names(Data, repo_name(Config));
- false -> r3_hex_registry:decode_names(Data, no_verify)
- end
- end,
- get_protobuf(Config, <<"names">>, Decoder).
-
-%% @doc
-%% Gets versions resource from the repository.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_repo:get_versions(Config).
-%% {ok, {200, ...,
-%% [
-%% #{name => <<"package1">>, retired => [],
-%% versions => [<<"1.0.0">>]},
-%% #{name => <<"package2">>, retired => [<<"0.5.0>>"],
-%% versions => [<<"0.5.0">>, <<"1.0.0">>]},
-%% ]}}
-%% '''
-%% @end
-get_versions(Config) when is_map(Config) ->
- Verify = maps:get(repo_verify_origin, Config, true),
- Decoder = fun(Data) ->
- case Verify of
- true -> r3_hex_registry:decode_versions(Data, repo_name(Config));
- false -> r3_hex_registry:decode_versions(Data, no_verify)
- end
- end,
- get_protobuf(Config, <<"versions">>, Decoder).
-
-%% @doc
-%% Gets package resource from the repository.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_repo:get_package(r3_hex_core:default_config(), <<"package1">>).
-%% {ok, {200, ...,
-%% {
-%% #{checksum => ..., version => <<"0.5.0">>, dependencies => []},
-%% #{checksum => ..., version => <<"1.0.0">>, dependencies => [
-%% #{package => <<"package2">>, optional => true, requirement => <<"~> 0.1">>}
-%% ]},
-%% ]}}
-%% '''
-%% @end
-get_package(Config, Name) when is_binary(Name) and is_map(Config) ->
- Verify = maps:get(repo_verify_origin, Config, true),
- Decoder = fun(Data) ->
- case Verify of
- true -> r3_hex_registry:decode_package(Data, repo_name(Config), Name);
- false -> r3_hex_registry:decode_package(Data, no_verify, no_verify)
- end
- end,
- get_protobuf(Config, <<"packages/", Name/binary>>, Decoder).
-
-%% @doc
-%% Gets tarball from the repository.
-%%
-%% Examples:
-%%
-%% ```
-%% > {ok, {200, _, Tarball}} = r3_hex_repo:get_tarball(r3_hex_core:default_config(), <<"package1">>, <<"1.0.0">>),
-%% > {ok, #{metadata := Metadata}} = r3_hex_tarball:unpack(Tarball, memory).
-%% '''
-%% @end
-get_tarball(Config, Name, Version) ->
- ReqHeaders = make_headers(Config),
-
- case get(Config, tarball_url(Config, Name, Version), ReqHeaders) of
- {ok, {200, RespHeaders, Tarball}} ->
- {ok, {200, RespHeaders, Tarball}};
-
- Other ->
- Other
- end.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-get(Config, URI, Headers) ->
- r3_hex_http:request(Config, get, URI, Headers, undefined).
-
-get_protobuf(Config, Path, Decoder) ->
- PublicKey = maps:get(repo_public_key, Config),
- ReqHeaders = make_headers(Config),
-
- case get(Config, build_url(Config, Path), ReqHeaders) of
- {ok, {200, RespHeaders, Compressed}} ->
- Signed = zlib:gunzip(Compressed),
- case decode(Signed, PublicKey, Decoder, Config) of
- {ok, Decoded} ->
- {ok, {200, RespHeaders, Decoded}};
-
- {error, _} = Error ->
- Error
- end;
-
- Other ->
- Other
- end.
-
-decode(Signed, PublicKey, Decoder, Config) ->
- Verify = maps:get(repo_verify, Config, true),
-
- case Verify of
- true ->
- case r3_hex_registry:decode_and_verify_signed(Signed, PublicKey) of
- {ok, Payload} ->
- Decoder(Payload);
- Other ->
- Other
- end;
- false ->
- #{payload := Payload} = r3_hex_registry:decode_signed(Signed),
- Decoder(Payload)
- end.
-
-repo_name(#{repo_organization := Name}) when is_binary(Name) -> Name;
-repo_name(#{repo_name := Name}) when is_binary(Name) -> Name.
-
-tarball_url(Config, Name, Version) ->
- Filename = tarball_filename(Name, Version),
- build_url(Config, <<"tarballs/", Filename/binary>>).
-
-build_url(#{repo_url := URI, repo_organization := Org}, Path) when is_binary(Org) ->
- <<URI/binary, "/repos/", Org/binary, "/", Path/binary>>;
-build_url(#{repo_url := URI, repo_organization := undefined}, Path) ->
- <<URI/binary, "/", Path/binary>>;
-build_url(Config, Path) ->
- build_url(Config#{repo_organization => undefined}, Path).
-
-tarball_filename(Name, Version) ->
- <<Name/binary, "-", Version/binary, ".tar">>.
-
-make_headers(Config) ->
- maps:fold(fun set_header/3, #{}, Config).
-
-set_header(http_etag, ETag, Headers) when is_binary(ETag) -> maps:put(<<"if-none-match">>, ETag, Headers);
-set_header(repo_key, Token, Headers) when is_binary(Token) -> maps:put(<<"authorization">>, Token, Headers);
-set_header(_, _, Headers) -> Headers.
diff --git a/apps/rebar/src/vendored/r3_hex_tarball.erl b/apps/rebar/src/vendored/r3_hex_tarball.erl
deleted file mode 100644
index 7663f6a5..00000000
--- a/apps/rebar/src/vendored/r3_hex_tarball.erl
+++ /dev/null
@@ -1,574 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
--module(r3_hex_tarball).
--export([create/2, create/3, create_docs/1, create_docs/2, unpack/2, unpack/3,
- unpack_docs/2, unpack_docs/3, format_checksum/1, format_error/1]).
--ifdef(TEST).
--export([do_decode_metadata/1, gzip/1, normalize_requirements/1]).
--endif.
--define(VERSION, <<"3">>).
--define(BUILD_TOOL_FILES, [
- {<<"mix.exs">>, <<"mix">>},
- {<<"rebar.config">>, <<"rebar3">>},
- {<<"rebar">>, <<"rebar3">>},
- {<<"Makefile">>, <<"make">>},
- {<<"Makefile.win">>, <<"make">>}
-]).
--include_lib("kernel/include/file.hrl").
-
--type checksum() :: binary().
--type contents() :: #{filename() => binary()}.
--type filename() :: string().
--type files() :: [{filename(), filename() | binary()}].
--type metadata() :: map().
--type tarball() :: binary().
-
-%%====================================================================
-%% API functions
-%%====================================================================
-
-%% @doc
-%% Creates a package tarball.
-%%
-%% Returns the binary of the tarball the "inner checksum" and "outer checksum".
-%% The inner checksum is deprecated in favor of the outer checksum.
-%%
-%% Examples:
-%%
-%% ```
-%% > Metadata = #{<<"name">> => <<"foo">>, <<"version">> => <<"1.0.0">>},
-%% > Files = [{"src/foo.erl", <<"-module(foo).">>}],
-%% > r3_hex_tarball:create(Metadata, Files).
-%% {ok, #{tarball => <<86,69,...>>,
-%% outer_checksum => <<40,32,...>>,
-%% inner_checksum => <<178,12,...>>}}
-%% '''
-%% @end
--spec create(metadata(), files(), r3_hex_core:config()) -> {ok, #{tarball => tarball(), outer_checksum => checksum(),
- inner_checksum => tarball()}} | {error, term()}.
-create(Metadata, Files, Config) ->
- MetadataBinary = encode_metadata(Metadata),
- ContentsTarball = create_memory_tarball(Files),
- ContentsTarballCompressed = gzip(ContentsTarball),
- InnerChecksum = inner_checksum(?VERSION, MetadataBinary, ContentsTarballCompressed),
- InnerChecksumBase16 = encode_base16(InnerChecksum),
- TarballMaxSize = maps:get(tarball_max_size, Config),
- TarballMaxUncompressedSize = maps:get(tarball_max_uncompressed_size, Config),
-
- OuterFiles = [
- {"VERSION", ?VERSION},
- {"CHECKSUM", InnerChecksumBase16},
- {"metadata.config", MetadataBinary},
- {"contents.tar.gz", ContentsTarballCompressed}
- ],
-
- Tarball = create_memory_tarball(OuterFiles),
- OuterChecksum = checksum(Tarball),
-
- UncompressedSize = byte_size(ContentsTarball),
-
- case {(byte_size(Tarball) > TarballMaxSize), (UncompressedSize > TarballMaxUncompressedSize)} of
- {_, true} ->
- {error, {tarball, {too_big_uncompressed, TarballMaxUncompressedSize}}};
-
- {true, _} ->
- {error, {tarball, {too_big_compressed, TarballMaxSize}}};
-
- {false, false} ->
- {ok, #{tarball => Tarball, outer_checksum => OuterChecksum, inner_checksum => InnerChecksum}}
- end.
-
--spec create(metadata(), files()) -> {ok, #{tarball => tarball(), outer_checksum => checksum(),
- inner_checksum => tarball()}} | {error, term()}.
-create(Metadata, Files) ->
- create(Metadata, Files, r3_hex_core:default_config()).
-
-%% @doc
-%% Creates a docs tarball.
-%%
-%% Examples:
-%%
-%% ```
-%% > Files = [{"doc/index.html", <<"Docs">>}],
-%% > r3_hex_tarball:create_docs(Files).
-%% {ok, <<86,69,...>>}
-%% '''
-%% @end
--spec create_docs(files(), r3_hex_core:config()) -> {ok, tarball()} | {error, term()}.
-create_docs(Files, #{tarball_max_size := TarballMaxSize, tarball_max_uncompressed_size := TarballMaxUncompressedSize}) ->
- UncompressedTarball = create_memory_tarball(Files),
- UncompressedSize = byte_size(UncompressedTarball),
- Tarball = gzip(UncompressedTarball),
- Size = byte_size(Tarball),
-
- case(Size > TarballMaxSize) or (UncompressedSize > TarballMaxUncompressedSize) of
- true ->
- {error, {tarball, too_big}};
-
- false ->
- {ok, Tarball}
- end.
-
--spec create_docs(files()) -> {ok, tarball()}.
-create_docs(Files) ->
- create_docs(Files, r3_hex_core:default_config()).
-
-%% @doc
-%% Unpacks a package tarball.
-%%
-%% Remember to verify the outer tarball checksum against the registry checksum
-%% returned from `r3_hex_repo:get_package(Config, Package)`.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_tarball:unpack(Tarball, memory).
-%% {ok,#{outer_checksum => <<...>>,
-%% contents => [{"src/foo.erl",<<"-module(foo).">>}],
-%% metadata => #{<<"name">> => <<"foo">>, ...}}}
-%%
-%% > r3_hex_tarball:unpack(Tarball, "path/to/unpack").
-%% {ok,#{outer_checksum => <<...>>,
-%% metadata => #{<<"name">> => <<"foo">>, ...}}}
-%% '''
--spec unpack(tarball(), memory, r3_hex_core:config()) ->
- {ok, #{outer_checksum => checksum(), inner_checksum => checksum(),
- metadata => metadata(), contents => contents()}} |
- {error, term()};
- (tarball(), filename(), r3_hex_core:config()) ->
- {ok, #{outer_checksum => checksum(), inner_checksum => checksum(),
- metadata => metadata()}} |
- {error, term()}.
-unpack(Tarball, _, #{tarball_max_size := TarballMaxSize}) when byte_size(Tarball) > TarballMaxSize ->
- {error, {tarball, too_big}};
-
-unpack(Tarball, Output, _Config) ->
- case r3_hex_erl_tar:extract({binary, Tarball}, [memory]) of
- {ok, []} ->
- {error, {tarball, empty}};
-
- {ok, FileList} ->
- OuterChecksum = crypto:hash(sha256, Tarball),
- do_unpack(maps:from_list(FileList), OuterChecksum, Output);
-
- {error, Reason} ->
- {error, {tarball, Reason}}
- end.
-
-
--spec unpack(tarball(), memory) ->
- {ok, #{outer_checksum => checksum(), inner_checksum => checksum(),
- metadata => metadata(), contents => contents()}} |
- {error, term()};
- (tarball(), filename()) ->
- {ok, #{outer_checksum => checksum(), inner_checksum => checksum(),
- metadata => metadata()}} |
- {error, term()}.
-unpack(Tarball, Output) ->
- unpack(Tarball, Output, r3_hex_core:default_config()).
-
-%% @doc
-%% Unpacks a documentation tarball.
-%%
-%% Examples:
-%%
-%% ```
-%% > r3_hex_tarball:unpack_docs(Tarball, memory).
-%% {ok, [{"index.html", <<"<!doctype>">>}, ...]}
-%%
-%% > r3_hex_tarball:unpack_docs(Tarball, "path/to/unpack").
-%% ok
-%% '''
--spec unpack_docs(tarball(), memory, r3_hex_core:config()) -> {ok, contents()} | {error, term()};
- (tarball(), filename(), r3_hex_core:config()) -> ok | {error, term()}.
-unpack_docs(Tarball, _, #{tarball_max_size := TarballMaxSize}) when byte_size(Tarball) > TarballMaxSize ->
- {error, {tarball, too_big}};
-
-unpack_docs(Tarball, Output, _Config) ->
- unpack_tarball(Tarball, Output).
-
--spec unpack_docs(tarball(), memory) -> {ok, contents()} | {error, term()};
- (tarball(), filename()) -> ok | {error, term()}.
-unpack_docs(Tarball, Output) ->
- unpack_docs(Tarball, Output, r3_hex_core:default_config()).
-
-%% @doc
-%% Returns base16-encoded representation of checksum.
--spec format_checksum(checksum()) -> binary().
-format_checksum(Checksum) ->
- encode_base16(Checksum).
-
-%% @doc
-%% Converts an error reason term to a human-readable error message string.
--spec format_error(term()) -> string().
-format_error({tarball, empty}) -> "empty tarball";
-format_error({tarball, {too_big_uncompressed, Size}}) ->
- io_lib:format("package exceeds max uncompressed size ~w ~s", [format_byte_size(Size), "MB"]);
-format_error({tarball, {too_big_compressed, Size}}) ->
- io_lib:format("package exceeds max compressed size ~w ~s", [format_byte_size(Size), "MB"]);
-
-format_error({tarball, {missing_files, Files}}) -> io_lib:format("missing files: ~p", [Files]);
-format_error({tarball, {bad_version, Vsn}}) -> io_lib:format("unsupported version: ~p", [Vsn]);
-format_error({tarball, invalid_checksum}) -> "invalid tarball checksum";
-format_error({tarball, Reason}) -> "tarball error, " ++ r3_hex_erl_tar:format_error(Reason);
-format_error({inner_tarball, Reason}) -> "inner tarball error, " ++ r3_hex_erl_tar:format_error(Reason);
-format_error({metadata, invalid_terms}) -> "error reading package metadata: invalid terms";
-format_error({metadata, not_key_value}) -> "error reading package metadata: not in key-value format";
-format_error({metadata, Reason}) -> "error reading package metadata" ++ r3_safe_erl_term:format_error(Reason);
-
-format_error({checksum_mismatch, ExpectedChecksum, ActualChecksum}) ->
- io_lib:format(
- "tarball checksum mismatch~n~n" ++
- "Expected (base16-encoded): ~s~n" ++
- "Actual (base16-encoded): ~s",
- [encode_base16(ExpectedChecksum), encode_base16(ActualChecksum)]).
-
-format_byte_size(Size) ->
- Size / 1000000.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-inner_checksum(Version, MetadataBinary, ContentsBinary) ->
- Blob = <<Version/binary, MetadataBinary/binary, ContentsBinary/binary>>,
- crypto:hash(sha256, Blob).
-
-checksum(ContentsBinary) when is_binary(ContentsBinary) ->
- crypto:hash(sha256, ContentsBinary).
-
-encode_metadata(Meta) ->
- Data = lists:map(
- fun(MetaPair) ->
- String = io_lib_pretty:print(binarify(MetaPair), [{encoding, utf8}]),
- unicode:characters_to_binary([String, ".\n"])
- end, maps:to_list(Meta)),
- iolist_to_binary(Data).
-
-do_unpack(Files, OuterChecksum, Output) ->
- State = #{
- inner_checksum => undefined,
- outer_checksum => OuterChecksum,
- contents => undefined,
- files => Files,
- metadata => undefined,
- output => Output
- },
- State1 = check_files(State),
- State2 = check_version(State1),
- State3 = check_inner_checksum(State2),
- State4 = decode_metadata(State3),
- finish_unpack(State4).
-
-finish_unpack({error, _} = Error) ->
- Error;
-finish_unpack(#{metadata := Metadata, files := Files, inner_checksum := InnerChecksum, outer_checksum := OuterChecksum, output := Output}) ->
- _ = maps:get("VERSION", Files),
- ContentsBinary = maps:get("contents.tar.gz", Files),
-
- case Output of
- memory -> ok;
- _ -> filelib:ensure_dir(filename:join(Output, "*"))
- end,
-
- case unpack_tarball(ContentsBinary, Output) of
- ok ->
- copy_metadata_config(Output, maps:get("metadata.config", Files)),
- {ok, #{inner_checksum => InnerChecksum, outer_checksum => OuterChecksum, metadata => Metadata}};
-
- {ok, Contents} ->
- {ok, #{inner_checksum => InnerChecksum, outer_checksum => OuterChecksum, metadata => Metadata, contents => Contents}};
-
- {error, Reason} ->
- {error, {inner_tarball, Reason}}
- end.
-
-copy_metadata_config(Output, MetadataBinary) ->
- ok = file:write_file(filename:join(Output, "hex_metadata.config"), MetadataBinary).
-
-check_files(#{files := Files} = State) ->
- RequiredFiles = ["VERSION", "CHECKSUM", "metadata.config", "contents.tar.gz"],
- case diff_keys(Files, RequiredFiles, []) of
- ok ->
- State;
-
- {error, {missing_keys, Keys}} ->
- {error, {tarball, {missing_files, Keys}}}
- end.
-
-check_version({error, _} = Error) ->
- Error;
-check_version(#{files := Files} = State) ->
- case maps:get("VERSION", Files) of
- <<"3">> ->
- State;
-
- Version ->
- {error, {tarball, {bad_version, Version}}}
- end.
-
-% Note: This checksum is deprecated
-check_inner_checksum({error, _} = Error) ->
- Error;
-check_inner_checksum(#{files := Files} = State) ->
- ChecksumBase16 = maps:get("CHECKSUM", Files),
- ExpectedChecksum = decode_base16(ChecksumBase16),
-
- Version = maps:get("VERSION", Files),
- MetadataBinary = maps:get("metadata.config", Files),
- ContentsBinary = maps:get("contents.tar.gz", Files),
- ActualChecksum = inner_checksum(Version, MetadataBinary, ContentsBinary),
-
- if
- byte_size(ExpectedChecksum) /= 32 ->
- {error, {tarball, invalid_inner_checksum}};
-
- ExpectedChecksum == ActualChecksum ->
- maps:put(inner_checksum, ExpectedChecksum, State);
-
- true ->
- {error, {tarball, {inner_checksum_mismatch, ExpectedChecksum, ActualChecksum}}}
- end.
-
-decode_metadata({error, _} = Error) ->
- Error;
-decode_metadata(#{files := #{"metadata.config" := Binary}} = State) when is_binary(Binary) ->
- case do_decode_metadata(Binary) of
- #{} = Metadata -> maps:put(metadata, normalize_metadata(Metadata), State);
- Other -> Other
- end.
-
-do_decode_metadata(Binary) when is_binary(Binary) ->
- {ok, String} = characters_to_list(Binary),
-
- case r3_safe_erl_term:string(String) of
- {ok, Tokens, _Line} ->
- try
- Terms = r3_safe_erl_term:terms(Tokens),
- maps:from_list(Terms)
- catch
- error:function_clause ->
- {error, {metadata, invalid_terms}};
-
- error:badarg ->
- {error, {metadata, not_key_value}}
- end;
-
- {error, {_Line, r3_safe_erl_term, Reason}, _Line2} ->
- {error, {metadata, Reason}}
- end.
-
-characters_to_list(Binary) ->
- case unicode:characters_to_list(Binary) of
- List when is_list(List) ->
- {ok, List};
- {error, _, _} ->
- case unicode:characters_to_list(Binary, latin1) of
- List when is_list(List) -> {ok, List};
- Other -> Other
- end
- end.
-
-normalize_metadata(Metadata1) ->
- Metadata2 = maybe_update_with(<<"requirements">>, fun normalize_requirements/1, Metadata1),
- Metadata3 = maybe_update_with(<<"links">>, fun try_into_map/1, Metadata2),
- Metadata4 = maybe_update_with(<<"extra">>, fun try_into_map/1, Metadata3),
- guess_build_tools(Metadata4).
-
-normalize_requirements(Requirements) ->
- case is_list(Requirements) andalso (Requirements /= []) andalso is_list(hd(Requirements)) of
- true ->
- maps:from_list(lists:map(fun normalize_legacy_requirement/1, Requirements));
-
- false ->
- try_into_map(fun normalize_normal_requirement/1, Requirements)
- end.
-
-normalize_normal_requirement({Name, Requirement}) ->
- {Name, try_into_map(Requirement)}.
-
-normalize_legacy_requirement(Requirement) ->
- Map = maps:from_list(Requirement),
- Name = maps:get(<<"name">>, Map),
- {Name, maps:without([<<"name">>], Map)}.
-
-guess_build_tools(#{<<"build_tools">> := BuildTools} = Metadata) when is_list(BuildTools) ->
- Metadata;
-guess_build_tools(#{<<"files">> := Filenames} = Metadata) ->
- BaseFiles = [Filename || Filename <- Filenames, filename:dirname(binary_to_list(Filename)) == "."],
- BuildTools = lists:usort([Tool || {Filename, Tool} <- ?BUILD_TOOL_FILES, lists:member(Filename, BaseFiles)]),
- Metadata#{<<"build_tools">> => BuildTools};
-guess_build_tools(Metadata) ->
- Metadata.
-
-%%====================================================================
-%% Tar Helpers
-%%====================================================================
-
-unpack_tarball(ContentsBinary, memory) ->
- r3_hex_erl_tar:extract({binary, ContentsBinary}, [memory, compressed]);
-unpack_tarball(ContentsBinary, Output) ->
- filelib:ensure_dir(filename:join(Output, "*")),
- case r3_hex_erl_tar:extract({binary, ContentsBinary}, [{cwd, Output}, compressed]) of
- ok ->
- [try_updating_mtime(filename:join(Output, Path)) || Path <- filelib:wildcard("**", Output)],
- ok;
- Other ->
- Other
- end.
-
-%% let it silently fail for bad symlinks
-try_updating_mtime(Path) ->
- Time = calendar:universal_time(),
- _ = file:write_file_info(Path, #file_info{mtime=Time}, [{time, universal}]),
- ok.
-
-create_memory_tarball(Files) ->
- Path = tmp_path(),
- {ok, Tar} = r3_hex_erl_tar:open(Path, [write]),
-
- try
- add_files(Tar, Files)
- after
- ok = r3_hex_erl_tar:close(Tar)
- end,
- {ok, Tarball} = file:read_file(Path),
- ok = file:delete(Path),
- Tarball.
-
-tmp_path() ->
- "tmp_" ++ binary_to_list(encode_base16(crypto:strong_rand_bytes(32))).
-
-add_files(Tar, Files) when is_list(Files) ->
- lists:map(fun(File) -> add_file(Tar, File) end, Files).
-
-add_file(Tar, {Filename, Contents}) when is_list(Filename) and is_binary(Contents) ->
- ok = r3_hex_erl_tar:add(Tar, Contents, Filename, tar_opts());
-add_file(Tar, Filename) when is_list(Filename) ->
- add_file(Tar, {Filename, Filename});
-add_file(Tar, {Filename, AbsFilename}) when is_list(Filename), is_list(AbsFilename) ->
- {ok, FileInfo} = file:read_link_info(AbsFilename, []),
-
- case FileInfo#file_info.type of
- symlink ->
- ok = r3_hex_erl_tar:add(Tar, {Filename, AbsFilename}, tar_opts());
- directory ->
- case file:list_dir(AbsFilename) of
- {ok, []} ->
- r3_hex_erl_tar:add(Tar, {Filename, AbsFilename}, tar_opts());
-
- {ok, _} ->
- ok
- end;
- _ ->
- Mode = FileInfo#file_info.mode,
- {ok, Contents} = file:read_file(AbsFilename),
- ok = r3_hex_erl_tar:add(Tar, Contents, Filename, Mode, tar_opts())
- end.
-
-tar_opts() ->
- NixEpoch = calendar:datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}}),
- Y2kEpoch = calendar:datetime_to_gregorian_seconds({{2000, 1, 1}, {0, 0, 0}}),
- Epoch = Y2kEpoch - NixEpoch,
- [{atime, Epoch}, {mtime, Epoch}, {ctime, Epoch}, {uid, 0}, {gid, 0}].
-
-%% Reproducible gzip by not setting mtime and OS
-%%
-%% From https://tools.ietf.org/html/rfc1952
-%%
-%% +---+---+---+---+---+---+---+---+---+---+
-%% |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->)
-%% +---+---+---+---+---+---+---+---+---+---+
-%%
-%% +=======================+
-%% |...compressed blocks...| (more-->)
-%% +=======================+
-%%
-%% +---+---+---+---+---+---+---+---+
-%% | CRC32 | ISIZE |
-%% +---+---+---+---+---+---+---+---+
-gzip(Uncompressed) ->
- Compressed = gzip_no_header(Uncompressed),
- Header = <<31, 139, 8, 0, 0, 0, 0, 0, 0, 0>>,
- Crc = erlang:crc32(Uncompressed),
- Size = byte_size(Uncompressed),
- Trailer = <<Crc:32/little, Size:32/little>>,
- iolist_to_binary([Header, Compressed, Trailer]).
-
-gzip_no_header(Uncompressed) ->
- Zstream = zlib:open(),
-
- try
- zlib:deflateInit(Zstream, default, deflated, -15, 8, default),
- Compressed = zlib:deflate(Zstream, Uncompressed, finish),
- zlib:deflateEnd(Zstream),
- iolist_to_binary(Compressed)
- after
- zlib:close(Zstream)
- end.
-
-%%====================================================================
-%% Helpers
-%%====================================================================
-
-binarify(Binary) when is_binary(Binary) -> Binary;
-binarify(Number) when is_number(Number) -> Number;
-binarify(Atom) when Atom == undefined orelse is_boolean(Atom) -> Atom;
-binarify(Atom) when is_atom(Atom) -> atom_to_binary(Atom, utf8);
-binarify(List) when is_list(List) ->
- [binarify(E) || E <- List];
-binarify({Key, Value}) ->
- {binarify(Key), binarify(Value)};
-binarify(Map) when is_map(Map) ->
- List = maps:to_list(Map),
- lists:map(fun({K, V}) -> binarify({K, V}) end, List).
-
-diff_keys(Map, RequiredKeys, OptionalKeys) ->
- Keys = maps:keys(Map),
- MissingKeys = RequiredKeys -- Keys,
- UnknownKeys = Keys -- (RequiredKeys ++ OptionalKeys),
-
- case {MissingKeys, UnknownKeys} of
- {[], []} ->
- ok;
-
- % Server should validate this but clients should not
- % {_, [_ | _]} ->
- % {error, {unknown_keys, UnknownKeys}};
-
- _ ->
- {error, {missing_keys, MissingKeys}}
- end.
-
-maybe_update_with(Key, Fun, Map) ->
- case maps:find(Key, Map) of
- {ok, Value} -> maps:put(Key, Fun(Value), Map);
- error -> Map
- end.
-
-try_into_map(List) ->
- try_into_map(fun(X) -> X end, List).
-
-try_into_map(Fun, Input) ->
- case is_list(Input) andalso lists:all(fun(E) -> is_tuple(E) andalso (tuple_size(E) == 2) end, Input) of
- true -> maps:from_list(lists:map(Fun, Input));
- false -> Input
- end.
-
-encode_base16(Binary) ->
- <<X:256/big-unsigned-integer>> = Binary,
- String = string:to_upper(lists:flatten(io_lib:format("~64.16.0b", [X]))),
- list_to_binary(String).
-
-%% Based on https://github.com/goj/base16/blob/master/src/base16.erl
-%% (C) 2012, Erlang Solutions Ltd.
-
-decode_base16(Base16) ->
- << <<(unhex(H) bsl 4 + unhex(L))>> || <<H,L>> <= Base16 >>.
-
-unhex(D) when $0 =< D andalso D =< $9 ->
- D - $0;
-unhex(D) when $a =< D andalso D =< $f ->
- 10 + D - $a;
-unhex(D) when $A =< D andalso D =< $F ->
- 10 + D - $A.
diff --git a/apps/rebar/src/vendored/r3_safe_erl_term.xrl b/apps/rebar/src/vendored/r3_safe_erl_term.xrl
deleted file mode 100644
index 7ee78a7d..00000000
--- a/apps/rebar/src/vendored/r3_safe_erl_term.xrl
+++ /dev/null
@@ -1,79 +0,0 @@
-%% Vendored from hex_core v0.7.1, do not edit manually
-
-%%% Author : Robert Virding
-%%% Purpose : Token definitions for Erlang.
-
-Definitions.
-
-D = [0-9]
-U = [A-Z]
-L = [a-z]
-A = ({U}|{L}|{D}|_|@)
-WS = ([\000-\s])
-
-Rules.
-
-{L}{A}* : tokenize_atom(TokenChars, TokenLine).
-'(\\\^.|\\.|[^'])*' : tokenize_atom(escape(unquote(TokenChars, TokenLen)), TokenLine).
-"(\\\^.|\\.|[^"])*" : {token, {string, TokenLine, escape(unquote(TokenChars, TokenLen))}}.
-{D}+ : {token, {integer, TokenLine, list_to_integer(TokenChars)}}.
-[\#\[\]}{,+-] : {token, {list_to_atom(TokenChars), TokenLine}}.
-(<<|>>|=>) : {token, {list_to_atom(TokenChars), TokenLine}}.
-\. : {token, {dot, TokenLine}}.
-/ : {token, {'/', TokenLine}}.
-{WS}+ : skip_token.
-
-Erlang code.
-
--export([terms/1]).
-
-terms(Tokens) ->
- terms(Tokens, []).
-
-terms([{dot, _} = H], Buffer) ->
- [buffer_to_term([H|Buffer])];
-terms([{dot, _} = H|T], Buffer) ->
- [buffer_to_term([H|Buffer])|terms(T, [])];
-terms([H|T], Buffer) ->
- terms(T, [H|Buffer]).
-
-buffer_to_term(Buffer) ->
- {ok, Term} = erl_parse:parse_term(lists:reverse(Buffer)),
- Term.
-
-unquote(TokenChars, TokenLen) ->
- lists:sublist(TokenChars, 2, TokenLen - 2).
-
-tokenize_atom(TokenChars, TokenLine) ->
- try list_to_existing_atom(TokenChars) of
- Atom -> {token, {atom, TokenLine, Atom}}
- catch
- error:badarg -> {error, "illegal atom " ++ TokenChars}
- end.
-
-escape([$\\|Cs]) ->
- do_escape(Cs);
-escape([C|Cs]) ->
- [C|escape(Cs)];
-escape([]) -> [].
-
-do_escape([O1,O2,O3|S]) when
- O1 >= $0, O1 =< $7, O2 >= $0, O2 =< $7, O3 >= $0, O3 =< $7 ->
- [(O1*8 + O2)*8 + O3 - 73*$0|escape(S)];
-do_escape([$^,C|Cs]) ->
- [C band 31|escape(Cs)];
-do_escape([C|Cs]) when C >= $\000, C =< $\s ->
- escape(Cs);
-do_escape([C|Cs]) ->
- [escape_char(C)|escape(Cs)].
-
-escape_char($n) -> $\n; %\n = LF
-escape_char($r) -> $\r; %\r = CR
-escape_char($t) -> $\t; %\t = TAB
-escape_char($v) -> $\v; %\v = VT
-escape_char($b) -> $\b; %\b = BS
-escape_char($f) -> $\f; %\f = FF
-escape_char($e) -> $\e; %\e = ESC
-escape_char($s) -> $\s; %\s = SPC
-escape_char($d) -> $\d; %\d = DEL
-escape_char(C) -> C.
diff --git a/apps/rebar/test/mock_pkg_resource.erl b/apps/rebar/test/mock_pkg_resource.erl
index ec571f3c..e1db9376 100644
--- a/apps/rebar/test/mock_pkg_resource.erl
+++ b/apps/rebar/test/mock_pkg_resource.erl
@@ -101,7 +101,7 @@ mock_download(Opts) ->
<<"version">> => Vsn},
Files = all_files(rebar_app_info:dir(AppInfo1)),
- {ok, #{tarball := Tarball}} = r3_hex_tarball:create(Metadata, archive_names(Dir, Files)),
+ {ok, #{tarball := Tarball}} = hex_tarball:create(Metadata, archive_names(Dir, Files)),
Archive = filename:join([Dir, TarApp]),
file:write_file(Archive, Tarball),
diff --git a/apps/rebar/test/rebar_pkg_SUITE.erl b/apps/rebar/test/rebar_pkg_SUITE.erl
index 1bfce091..afcb3012 100644
--- a/apps/rebar/test/rebar_pkg_SUITE.erl
+++ b/apps/rebar/test/rebar_pkg_SUITE.erl
@@ -97,7 +97,7 @@ init_per_testcase(bad_disconnect=Name, Config0) ->
{pkg, Pkg}
| Config0],
Config = mock_config(Name, Config1),
- meck:expect(r3_hex_repo, get_tarball, fun(_, _, _) ->
+ meck:expect(hex_repo, get_tarball, fun(_, _, _) ->
{error, econnrefused}
end),
Config;
@@ -288,8 +288,8 @@ mock_config(Name, Config) ->
end, AllDeps),
- meck:new(r3_hex_repo, [passthrough]),
- meck:expect(r3_hex_repo, get_package,
+ meck:new(hex_repo, [passthrough]),
+ meck:expect(hex_repo, get_package,
fun(_Config, PkgName) ->
Matches = ets:match_object(Tid, {{PkgName,'_'}, '_'}),
Releases =
@@ -311,7 +311,7 @@ mock_config(Name, Config) ->
end),
meck:expect(rebar_state, resources,
fun(_State) ->
- DefaultConfig = r3_hex_core:default_config(),
+ DefaultConfig = hex_core:default_config(),
[rebar_resource_v2:new(pkg, rebar_pkg_resource,
#{repos => [DefaultConfig#{name => <<"hexpm">>}],
base_config => #{}})]
@@ -333,7 +333,7 @@ mock_config(Name, Config) ->
PkgFile = <<Pkg/binary, "-", Vsn/binary, ".tar">>,
{ok, PkgContents} = file:read_file(filename:join(?config(data_dir, Config), PkgFile)),
- meck:expect(r3_hex_repo, get_tarball, fun(_, _, _) when GoodCache ->
+ meck:expect(hex_repo, get_tarball, fun(_, _, _) when GoodCache ->
{ok, {304, #{<<"etag">> => ?good_etag}, <<>>}};
(_, _, _) ->
{ok, {200, #{<<"etag">> => ?good_etag}, PkgContents}}
diff --git a/apps/rebar/test/rebar_pkg_alias_SUITE.erl b/apps/rebar/test/rebar_pkg_alias_SUITE.erl
index 5ba544de..15151890 100644
--- a/apps/rebar/test/rebar_pkg_alias_SUITE.erl
+++ b/apps/rebar/test/rebar_pkg_alias_SUITE.erl
@@ -241,8 +241,8 @@ mock_config(Name, Config) ->
end, AllDeps),
- meck:new(r3_hex_repo, [passthrough]),
- meck:expect(r3_hex_repo, get_package,
+ meck:new(hex_repo, [passthrough]),
+ meck:expect(hex_repo, get_package,
fun(_Config, PkgName) ->
Matches = ets:match_object(Tid, {{PkgName,'_'}, '_'}),
Releases =
@@ -254,7 +254,7 @@ mock_config(Name, Config) ->
{ok, {200, #{}, Releases}}
end),
- meck:expect(r3_hex_repo, get_tarball, fun(_, _, _) ->
+ meck:expect(hex_repo, get_tarball, fun(_, _, _) ->
{ok, {304, #{<<"etag">> => EtagGood}, <<>>}}
end),
diff --git a/apps/rebar/test/rebar_test_utils.erl b/apps/rebar/test/rebar_test_utils.erl
index 0a4d2f68..78b9a662 100644
--- a/apps/rebar/test/rebar_test_utils.erl
+++ b/apps/rebar/test/rebar_test_utils.erl
@@ -532,7 +532,7 @@ package_app(AppDir, DestDir, PkgName, PkgVsn) ->
Files = lists:zip([filename:join("src", F) || F <- Fs], [filename:join(AppSrc,F) || F <- Fs]),
Metadata = #{<<"app">> => list_to_binary(PkgName),
<<"version">> => list_to_binary(PkgVsn)},
- {ok, #{tarball := Tarball, outer_checksum := <<Checksum:256/big-unsigned-integer>>}} = r3_hex_tarball:create(Metadata, Files),
+ {ok, #{tarball := Tarball, outer_checksum := <<Checksum:256/big-unsigned-integer>>}} = hex_tarball:create(Metadata, Files),
Name = PkgName++"-"++PkgVsn++".tar",
Archive = filename:join(DestDir, Name),
diff --git a/bootstrap b/bootstrap
index 4d337b0e..b399d7ba 100755
--- a/bootstrap
+++ b/bootstrap
@@ -38,7 +38,6 @@ main(Args) ->
filelib:ensure_dir("_build/bootstrap/lib/rebar/ebin/"),
os:putenv("REBAR_PROFILE", "bootstrap"),
- compile_vendored(),
%% Build rebar3 modules with compile:file
bootstrap_rebar3(),
@@ -136,14 +135,6 @@ maybe_set_ipfamily({ok, _}, Family) ->
maybe_set_ipfamily(_, _Family) ->
ok.
-compile_vendored() ->
- compile_xrl_file("apps/rebar/src/vendored/r3_safe_erl_term.xrl"),
- Sources = filelib:wildcard(filename:join(["apps/rebar/src/vendored", "*.erl"])),
- OutDir = filename:absname("_build/bootstrap/lib/rebar/ebin"),
- code:add_patha(OutDir),
- Opts = [debug_info,{outdir, OutDir}, return | additional_defines()],
- [compile_erl_file(X, Opts) || X <- Sources].
-
compile(App, FirstFiles) ->
Dir = filename:join(filename:absname("_build/default/lib/"), App),
filelib:ensure_dir(filename:join([Dir, "ebin", "dummy.beam"])),
diff --git a/systest/all_SUITE_data/compile_deps/rebar.config.script b/systest/all_SUITE_data/compile_deps/rebar.config.script
index c0ebab17..fc8fc2a5 100644
--- a/systest/all_SUITE_data/compile_deps/rebar.config.script
+++ b/systest/all_SUITE_data/compile_deps/rebar.config.script
@@ -1,2 +1 @@
-os:putenv("LOCALDEP_DIR", "./vendored/").
CONFIG.