Packages
rebar3_hex
2.2.0
7.1.0
7.0.11
7.0.10
7.0.9
7.0.8
7.0.7
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.11.9
6.11.8
6.11.7
6.11.6
6.11.5
6.11.4
6.11.3
6.11.2
6.11.1
6.11.0
6.10.3
6.10.2
6.10.1
6.10.0
6.9.6
6.9.5
6.9.4
6.9.3
6.9.2
6.9.1
6.9.0
6.8.0
6.7.0
6.6.0
6.5.0
6.4.0
6.3.0
6.2.0
6.1.0
6.0.0
4.1.0
4.0.0
3.1.0
3.0.0
2.5.1
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.0
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.3
1.6.1
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Hex.pm plugin for rebar3
Current section
Files
Jump to
Current section
Files
src/rebar3_hex_tar.erl
-module(rebar3_hex_tar).
-export([create/4]).
-include("rebar3_hex.hrl").
create(Name, Version, Meta, Files) ->
ContentsPath = io_lib:format("~s-~s-contents.tar.gz", [Name, Version]),
Path = io_lib:format("~s-~s.tar", [Name, Version]),
ok = erl_tar:create(ContentsPath, Files, [compressed]),
{ok, Contents} = file:read_file(ContentsPath),
MetaString = encode_term(Meta),
Blob = <<(?VERSION)/binary, MetaString/binary, Contents/binary>>,
<<X:256/big-unsigned-integer>> = crypto:hash(sha256, Blob),
Checksum = string:to_upper(lists:flatten(io_lib:format("~64.16.0b", [X]))),
MetaFiles = [
{"VERSION", ?VERSION},
{"CHECKSUM", list_to_binary(Checksum)},
{"metadata.config", MetaString},
{"contents.tar.gz", Contents}
],
ok = erl_tar:create(Path, MetaFiles),
Tar = file:read_file(Path),
file:delete(ContentsPath),
file:delete(Path),
Tar.
encode_term(Meta) ->
Data = lists:map(fun(MetaPair) ->
String = io_lib_pretty:print(rebar3_hex_utils:binarify(MetaPair), [{encoding, utf8}]),
unicode:characters_to_binary([String, ".\n"])
end, Meta),
iolist_to_binary(Data).