defmodule Mix.PhilColumns do import Mix.EctoSQL @doc """ Ensures the given repository's seeds path exists on the file system. """ @spec ensure_seeds_path(Ecto.Repo.t, Keyword.t) :: String.t def ensure_seeds_path(repo, opts) do path = opts[:seeds_path] || Path.join(source_repo_priv(repo), "seeds") if not Mix.Project.umbrella? and not File.dir?(path) do raise_missing_seeds(Path.relative_to_cwd(path), repo) end path end defp raise_missing_seeds(path, repo) do Mix.raise """ Could not find seeds directory #{inspect path} for repo #{inspect repo}. This may be because you are in a new project and the migration directory has not been created yet. Creating an empty directory at the path above will fix this error. If you expected existing seeds to be found, please make sure your repository has been properly configured and the configured path exists. """ end @doc """ Restarts the app if there was any migration command. """ @spec restart_apps_if_migrated([atom], list()) :: :ok def restart_apps_if_migrated(_apps, []), do: :ok def restart_apps_if_migrated(apps, [_|_]) do # Silence the logger to avoid application down messages. Logger.remove_backend(:console) for app <- Enum.reverse(apps) do Application.stop(app) end for app <- apps do Application.ensure_all_started(app) end :ok after Logger.add_backend(:console, flush: true) end def root_mod(repo_mod) do name = repo_mod |> root_mod_name Module.concat([name]) end def root_mod_name(repo_mod) do repo_mod |> Module.split |> List.first end #@doc """ #Gets a path relative to the application path. #Raises on umbrella application. #""" #def no_umbrella!(task) do #if Mix.Project.umbrella? do #Mix.raise "cannot run task #{inspect task} from umbrella application" #end #end @doc """ Gets the seeds path from a repository. """ @spec seeds_path(Ecto.Repo.t) :: String.t def seeds_path(repo) do Path.join(source_repo_priv(repo), "seeds") end end