Packages
nerves
1.5.3
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/nerves/artifact/resolver.ex
defmodule Nerves.Artifact.Resolver do
@callback get(term) :: {:ok, data :: String.t()} | {:error, term}
@spec get(term, pkg :: Nerves.Package.t()) :: {:ok, file :: String.t()} | {:error, term}
def get([], _pkg) do
{:error, :no_result}
end
def get(resolvers, pkg) do
do_get(resolvers, pkg)
end
def do_get(_, _, _raise \\ nil)
def do_get([], _pkg, nil), do: {:error, :no_result}
def do_get([], _pkg, reason), do: Mix.raise(reason)
def do_get([{resolver, opts} | resolvers], pkg, raise_reason) do
case resolver.get(opts) do
{:ok, data} ->
file = Nerves.Artifact.download_path(pkg)
File.mkdir_p(Nerves.Env.download_dir())
File.write(file, data)
case Nerves.Utils.File.validate(file) do
:ok ->
{:ok, file}
{:error, reason} ->
Nerves.Utils.Shell.warn(" Invalid or corrupt file")
File.rm(file)
reason = if is_binary(reason), do: reason, else: inspect(reason)
raise_reason = """
Nerves encountered errors while validating artifact download.
#{reason}
"""
do_get(resolvers, pkg, raise_reason)
end
{:error, reason} ->
Nerves.Utils.Shell.warn(" #{reason}")
do_get(resolvers, pkg, raise_reason)
end
end
end