Packages
nerves
1.11.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/utils/file.ex
defmodule Nerves.Utils.File do
@moduledoc false
@spec untar(String.t(), String.t() | nil) :: :ok | {:error, any}
def untar(file, destination \\ nil) do
destination = destination || File.cwd!()
cmd("tar", ["xf", file, "--strip-components=1", "-C", destination])
|> result()
end
@doc """
Create a tar of the contents of the path and specified output file
"""
@spec tar(String.t(), String.t()) :: :ok | {:error, any}
def tar(path, file) do
working_dir = Path.dirname(path)
path = Path.basename(path)
cmd("tar", ["-czf", file, "-C", working_dir, path])
|> result()
end
@spec validate(String.t()) :: :ok | {:error, any}
def validate(file) do
Path.extname(file)
|> ext_cmd()
|> cmd(["-t", file])
|> result()
end
@doc false
@spec ext_cmd(String.t()) :: String.t()
def ext_cmd(".xz"), do: "xz"
def ext_cmd(".gz"), do: "gzip"
def ext_cmd(".tar"), do: "tar"
defp result({"", 0}), do: :ok
defp result({reason, _}), do: {:error, reason}
defp cmd(cmd, args) do
if System.find_executable(cmd) do
Nerves.Port.cmd(cmd, args, stderr_to_stdout: true)
else
raise "Could not find '#{cmd}'. See https://hexdocs.pm/nerves/installation.html for required packages."
end
end
end