hex_tarball (hex_core v0.7.1) View Source

Functions for creating and unpacking Hex tarballs.

Link to this section Summary

Functions

Creates a package tarball.

Creates a docs tarball.

Returns base16-encoded representation of checksum.
Converts an error reason term to a human-readable error message string.

Unpacks a package tarball.

Unpacks a documentation tarball.

Link to this section Types

Specs

checksum() :: binary()

Specs

contents() :: %{optional(filename()) => binary()}

Specs

filename() :: string()

Specs

files() :: [{filename(), filename() | binary()}]

Specs

metadata() :: map()

Specs

tarball() :: binary()

Link to this section Functions

Specs

create(metadata(), files()) ::
  {:ok,
   %{
     optional(:tarball) => tarball(),
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => tarball()
   }}
  | {:error, term()}
Link to this function

create(Metadata, Files, Config)

View Source

Specs

create(metadata(), files(), :hex_core.config()) ::
  {:ok,
   %{
     optional(:tarball) => tarball(),
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => tarball()
   }}
  | {:error, term()}

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).">>}],
  > hex_tarball:create(Metadata, Files).
  {ok, #{tarball => <<86,69,...>>,
         outer_checksum => <<40,32,...>>,
         inner_checksum => <<178,12,...>>}}

Specs

create_docs(files()) :: {:ok, tarball()}

Specs

create_docs(files(), :hex_core.config()) :: {:ok, tarball()} | {:error, term()}

Creates a docs tarball.

Examples:

  > Files = [{"doc/index.html", <<"Docs">>}],
  > hex_tarball:create_docs(Files).
  {ok, <<86,69,...>>}
Link to this function

format_checksum(Checksum)

View Source

Specs

format_checksum(checksum()) :: binary()
Returns base16-encoded representation of checksum.

Specs

format_error(term()) :: string()
Converts an error reason term to a human-readable error message string.

Specs

unpack(tarball(), :memory) ::
  {:ok,
   %{
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => checksum(),
     optional(:metadata) => metadata(),
     optional(:contents) => contents()
   }}
  | {:error, term()}
unpack(tarball(), filename()) ::
  {:ok,
   %{
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => checksum(),
     optional(:metadata) => metadata()
   }}
  | {:error, term()}
Link to this function

unpack(Tarball, Output, Config)

View Source

Specs

unpack(tarball(), :memory, :hex_core.config()) ::
  {:ok,
   %{
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => checksum(),
     optional(:metadata) => metadata(),
     optional(:contents) => contents()
   }}
  | {:error, term()}
unpack(tarball(), filename(), :hex_core.config()) ::
  {:ok,
   %{
     optional(:outer_checksum) => checksum(),
     optional(:inner_checksum) => checksum(),
     optional(:metadata) => metadata()
   }}
  | {:error, term()}

Unpacks a package tarball.

Remember to verify the outer tarball checksum against the registry checksum returned from hex_repo:get_package(Config, Package).

Examples:

  > hex_tarball:unpack(Tarball, memory).
  {ok,#{outer_checksum => <<...>>,
        contents => [{"src/foo.erl",<<"-module(foo).">>}],
        metadata => #{<<"name">> => <<"foo">>, ...}}}
 
  > hex_tarball:unpack(Tarball, "path/to/unpack").
  {ok,#{outer_checksum => <<...>>,
        metadata => #{<<"name">> => <<"foo">>, ...}}}
Link to this function

unpack_docs(Tarball, Output)

View Source

Specs

unpack_docs(tarball(), :memory) :: {:ok, contents()} | {:error, term()}
unpack_docs(tarball(), filename()) :: :ok | {:error, term()}
Link to this function

unpack_docs(Tarball, Output, Config)

View Source

Specs

unpack_docs(tarball(), :memory, :hex_core.config()) ::
  {:ok, contents()} | {:error, term()}
unpack_docs(tarball(), filename(), :hex_core.config()) :: :ok | {:error, term()}

Unpacks a documentation tarball.

Examples:

  > hex_tarball:unpack_docs(Tarball, memory).
  {ok, [{"index.html", <<"<!doctype>">>}, ...]}
 
  > hex_tarball:unpack_docs(Tarball, "path/to/unpack").
  ok