lib/attic/env.ex

defmodule Mix.Tasks.Nerves.Env do
  @moduledoc deprecated: "Tasks from :nerves should be used instead"
  use Mix.Task
  import Mix.Nerves.IO

  @switches [info: :boolean, disable: :boolean]

  @impl Mix.Task
  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.precompile, 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

    # Ensure Nerves is compiled and bootstrapped in
    # If it was already run, this is a noop
    Mix.Task.run("nerves.bootstrap")

    Nerves.Env.start()
    debug_info("Env End")
    if opts[:info], do: print_env()
  end

  defp 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
end