Ecto tasks: Resolve relative path using the application directory
authorrinpatch <rinpatch@sdf.org>
Sat, 22 Jun 2019 01:17:04 +0000 (04:17 +0300)
committerrinpatch <rinpatch@sdf.org>
Sat, 22 Jun 2019 01:17:04 +0000 (04:17 +0300)
instead of cwd and load the application before doing anything

In OTP releases cwd != app directory and the configuration is read
only if the application is loaded

lib/mix/pleroma.ex
lib/mix/tasks/pleroma/ecto/ecto.ex
lib/mix/tasks/pleroma/ecto/migrate.ex
lib/mix/tasks/pleroma/ecto/rollback.ex

index 548c8a0a45158151bd074d37fb58a5c200c2ea2b..1b758ea33fa1497f47c428f34208ea39d47c4973 100644 (file)
@@ -9,6 +9,10 @@ defmodule Mix.Pleroma do
     {:ok, _} = Application.ensure_all_started(:pleroma)
   end
 
+  def load_pleroma do
+    Application.load(:pleroma)
+  end
+
   def get_option(options, opt, prompt, defval \\ nil, defname \\ nil) do
     Keyword.get(options, opt) || shell_prompt(prompt, defval, defname)
   end
index af09cb289f9f7915b2e8dae8779c46b0074b7cf1..324f57fdd789be719ca6ea3fd8b386f922c59e3b 100644 (file)
@@ -9,6 +9,15 @@ defmodule Mix.Tasks.Pleroma.Ecto do
   def ensure_migrations_path(repo, opts) do
     path = opts[:migrations_path] || Path.join(source_repo_priv(repo), "migrations")
 
+    path =
+      case Path.type(path) do
+        :relative ->
+          Path.join(Application.app_dir(:pleroma), path)
+
+        :absolute ->
+          path
+      end
+
     if not File.dir?(path) do
       raise_missing_migrations(Path.relative_to_cwd(path), repo)
     end
@@ -22,7 +31,7 @@ defmodule Mix.Tasks.Pleroma.Ecto do
   def source_repo_priv(repo) do
     config = repo.config()
     priv = config[:priv] || "priv/#{repo |> Module.split() |> List.last() |> Macro.underscore()}"
-    Path.join(File.cwd!(), priv)
+    Path.join(Application.app_dir(:pleroma), priv)
   end
 
   defp raise_missing_migrations(path, repo) do
index 22eafe76f49a0d4d83670e016a78c0ba7606efcc..855c977f677bf5180ce30e7b3900c4294453a28d 100644 (file)
@@ -4,6 +4,7 @@
 
 defmodule Mix.Tasks.Pleroma.Ecto.Migrate do
   use Mix.Task
+  import Mix.Pleroma
   require Logger
 
   @shortdoc "Wrapper on `ecto.migrate` task."
@@ -37,6 +38,7 @@ defmodule Mix.Tasks.Pleroma.Ecto.Migrate do
 
   @impl true
   def run(args \\ []) do
+    load_pleroma()
     {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
 
     opts =
index 0033ceba43c45c3952d7381c7594f705dad37ed4..2ffb0901c4aae911fef421120c555c3097e89d98 100644 (file)
@@ -4,6 +4,7 @@
 
 defmodule Mix.Tasks.Pleroma.Ecto.Rollback do
   use Mix.Task
+  import Mix.Pleroma
   require Logger
   @shortdoc "Wrapper on `ecto.rollback` task"
 
@@ -36,6 +37,7 @@ defmodule Mix.Tasks.Pleroma.Ecto.Rollback do
 
   @impl true
   def run(args \\ []) do
+    load_pleroma()
     {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
 
     opts =