Skip to content

Commit

Permalink
Vendor hex_erl (hexpm#518)
Browse files Browse the repository at this point in the history
  • Loading branch information
wojtekmach authored Mar 13, 2018
1 parent f5ac2d1 commit 0dfb71b
Show file tree
Hide file tree
Showing 19 changed files with 554 additions and 810 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/_build
/deps
/tmp
/src/safe_erl_term.erl
/src/vendored_safe_erl_term.erl
erl_crash.dump
*.ez
33 changes: 27 additions & 6 deletions lib/hex.ex
Original file line number Diff line number Diff line change
Expand Up @@ -121,16 +121,37 @@ defmodule Hex do
end

def create_tar!(metadata, files, output) do
case Hex.Tar.create(metadata, files, output) do
{:ok, result} -> result
{:error, reason} -> Mix.raise("Creating tarball failed: " <> Hex.Tar.format_error(reason))
files =
Enum.map(files, fn
{filename, contents} -> {string_to_charlist(filename), contents}
filename -> string_to_charlist(filename)
end)

case :vendored_hex_tarball.create(metadata, files) do
{:ok, {tarball, _checksum} = result} ->
if output != :memory, do: File.write!(output, tarball)
result

{:error, reason} ->
Mix.raise("Creating tarball failed: #{:vendored_hex_tarball.format_error(reason)}")
end
end

def unpack_tar!(path, dest) do
case Hex.Tar.unpack(path, dest) do
{:ok, result} -> result
{:error, reason} -> Mix.raise("Unpacking tarball failed: " <> Hex.Tar.format_error(reason))
tarball =
case path do
{:binary, tarball} -> tarball
_ -> File.read!(path)
end

dest = if dest == :memory, do: dest, else: string_to_charlist(dest)

case :vendored_hex_tarball.unpack(tarball, dest) do
{:ok, result} ->
result

{:error, reason} ->
Mix.raise("Unpacking tarball failed: #{:vendored_hex_tarball.format_error(reason)}")
end
end
end
2 changes: 1 addition & 1 deletion lib/hex/scm.ex
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ defmodule Hex.SCM do

File.rm_rf!(dest)
registry_checksum = Hex.Registry.Server.checksum(repo, to_string(name), lock.version)
{meta, tar_checksum} = Hex.unpack_tar!(path, dest)
%{checksum: tar_checksum, metadata: meta} = Hex.unpack_tar!(path, dest)

if tar_checksum != registry_checksum, do: raise("Checksum mismatch against registry")

Expand Down
Loading

0 comments on commit 0dfb71b

Please sign in to comment.