Packages
nerves_bootstrap
1.5.2
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
with %{} <- Mix.ProjectStack.peek(),
%{name: name, config: config, file: file} <- Mix.ProjectStack.pop(),
nil <- Mix.ProjectStack.peek() do
config =
config
|> host_config()
|> target_config(Nerves.Bootstrap.mix_target())
Mix.ProjectStack.push(name, config, file)
else
# We are not at the top of the stack. Do nothing.
_ ->
:noop
end
end
def host_config(config) do
update_in(config, [:aliases], &add_host_aliases(&1))
end
def target_config(config, :host), do: config
def target_config(config, _target) do
update_in(config, [:aliases], &add_target_aliases(&1))
end
def add_aliases(aliases) do
aliases
|> add_host_aliases()
|> add_target_aliases()
end
def add_host_aliases(aliases) do
aliases
|> append("deps.get", "nerves.deps.get")
|> replace("deps.update", &Nerves.Bootstrap.Aliases.deps_update/1)
end
def add_target_aliases(aliases) do
aliases
|> prepend("deps.loadpaths", "nerves.loadpaths")
|> prepend("deps.compile", "nerves.loadpaths")
|> replace("run", &Nerves.Bootstrap.Aliases.run/1)
end
def run(args) do
case Nerves.Bootstrap.mix_target() do
:host ->
Mix.Tasks.Run.run(args)
target ->
Mix.Nerves.IO.shell_warn("""
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