Packages
nerves_bootstrap
0.8.0
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.0
1.13.1
1.13.0
1.12.2
1.12.1
1.12.0
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.1
1.8.0
1.7.1
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.3
1.5.2
1.5.1
1.5.0
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.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
Nerves mix integration bootstrap and new project generator
Current section
Files
Jump to
Current section
Files
lib/nerves_bootstrap/aliases.ex
defmodule Nerves.Bootstrap.Aliases do
def init() do
System.get_env("MIX_TARGET")
|> init()
end
def init(nil), do: :noop
def init("host"), do: :noop
def init(target) do
Mix.shell().info([
:green,
"""
Nerves environment
MIX_TARGET: #{target}
MIX_ENV: #{Mix.env()}
""",
:reset
])
configure_project(Mix.ProjectStack.peek())
end
def configure_project(nil), do: :ok
def configure_project(_) do
%{name: name, config: config, file: file} = Mix.ProjectStack.pop()
config = update_in(config, [:aliases], &add_aliases(&1))
Mix.ProjectStack.push(name, config, file)
end
def add_aliases(aliases) do
aliases
|> append("deps.get", "nerves.deps.get")
|> prepend("deps.loadpaths", "nerves.loadpaths")
|> replace("deps.update", &Nerves.Bootstrap.Aliases.deps_update/1)
|> replace("run", &Nerves.Bootstrap.Aliases.run/1)
end
def run(args) do
case System.get_env("MIX_TARGET") do
nil ->
Mix.Tasks.Run.run(args)
target ->
Mix.raise("""
You are trying to run code compiled for #{target}
on your host. Please unset MIX_TARGET to run in host mode.
""")
end
end
def deps_update(args) do
Mix.Tasks.Deps.Update.run(args)
Mix.Tasks.Nerves.Deps.Get.run([])
end
defp append(aliases, a, na) do
key = String.to_atom(a)
Keyword.update(aliases, key, [a, na], &(drop(&1, na) ++ [na]))
end
defp prepend(aliases, a, na) do
key = String.to_atom(a)
Keyword.update(aliases, key, [na, a], &[na | drop(&1, na)])
end
defp replace(aliases, a, fun) do
key = String.to_atom(a)
Keyword.update(aliases, key, [fun], &(drop(&1, fun) ++ [fun]))
end
defp drop(aliases, a) do
Enum.reject(aliases, &(&1 === a))
end
end