B ReleaseTasks: Fix task module finding.
This commit is contained in:
parent
dcb0c47773
commit
551534f3ee
3 changed files with 35 additions and 8 deletions
1
changelog.d/module-search-in-pleroma-ctl.fix
Normal file
1
changelog.d/module-search-in-pleroma-ctl.fix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix pleroma_ctl mix task calls sometimes not being found
|
|
@ -16,17 +16,24 @@ def run(args) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_module(task) do
|
||||||
|
module_name =
|
||||||
|
task
|
||||||
|
|> String.split(".")
|
||||||
|
|> Enum.map(&String.capitalize/1)
|
||||||
|
|> then(fn x -> [Mix, Tasks, Pleroma] ++ x end)
|
||||||
|
|> Module.concat()
|
||||||
|
|
||||||
|
case Code.ensure_loaded(module_name) do
|
||||||
|
{:module, _} -> module_name
|
||||||
|
_ -> nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp mix_task(task, args) do
|
defp mix_task(task, args) do
|
||||||
Application.load(:pleroma)
|
Application.load(:pleroma)
|
||||||
{:ok, modules} = :application.get_key(:pleroma, :modules)
|
|
||||||
|
|
||||||
module =
|
module = find_module(task)
|
||||||
Enum.find(modules, fn module ->
|
|
||||||
module = Module.split(module)
|
|
||||||
|
|
||||||
match?(["Mix", "Tasks", "Pleroma" | _], module) and
|
|
||||||
String.downcase(List.last(module)) == task
|
|
||||||
end)
|
|
||||||
|
|
||||||
if module do
|
if module do
|
||||||
module.run(args)
|
module.run(args)
|
||||||
|
|
19
test/pleroma/release_tasks_test.exs
Normal file
19
test/pleroma/release_tasks_test.exs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.ReleaseTaskTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.ReleaseTasks
|
||||||
|
|
||||||
|
test "finding the module" do
|
||||||
|
task = "search.meilisearch"
|
||||||
|
assert Mix.Tasks.Pleroma.Search.Meilisearch == ReleaseTasks.find_module(task)
|
||||||
|
|
||||||
|
task = "user"
|
||||||
|
assert Mix.Tasks.Pleroma.User == ReleaseTasks.find_module(task)
|
||||||
|
|
||||||
|
refute ReleaseTasks.find_module("doesnt.exist")
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue