Current section

Files

Jump to
nerves_bootstrap lib mix tasks nerves env.ex
Raw

lib/mix/tasks/nerves/env.ex

defmodule Mix.Tasks.Nerves.Env do
use Mix.Task
import Mix.Nerves.IO
@moduledoc false
@switches [info: :boolean, disable: :boolean]
def run(argv) do
debug_info("Env Start")
{opts, _, _} = OptionParser.parse(argv, switches: @switches)
if opts[:disable] do
# This is the same code as Nerves.Env.disable/0, but I can't call that
# because we're about to load it immediately below. I also can't call it
# after it's loaded below because the act of compiling the nerves dep
# calls deps.precomile, which causes the system to get compiled unless
# Nerves.Env is disabled, which is what I'm trying to do here. :&
# This could probably be solved by moving Nerves.Env into nerves_bootstrap
System.put_env("NERVES_ENV_DISABLED", "1")
else
System.delete_env("NERVES_ENV_DISABLED")
end
unless Code.ensure_compiled?(Nerves.Env) do
Mix.Tasks.Deps.Loadpaths.run(["--no-compile"])
if distillery?() do
Mix.Tasks.Deps.Compile.run(["distillery", "--include-children"])
end
Mix.Tasks.Deps.Compile.run(["nerves", "--include-children"])
end
Nerves.Env.start()
debug_info("Env End")
if opts[:info], do: print_env()
end
def print_env() do
System.put_env("NERVES_DEBUG", "1")
debug_info("Environment Package List")
case Nerves.Env.packages() do
[] -> Mix.shell().info(" No packages found")
packages -> Enum.each(packages, &print_pkg/1)
end
Mix.Tasks.Nerves.Loadpaths.run([])
end
defp print_pkg(pkg) do
Mix.shell().info("""
Pkg: #{pkg.app}
Vsn: #{pkg.version}
Type: #{pkg.type}
BuildRunner: #{inspect(pkg.build_runner)}
""")
end
defp distillery?() do
Mix.Project.deps_paths()
|> Enum.map(&elem(&1, 0))
|> Enum.member?(:distillery)
end
end