summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2020-03-11 16:25:53 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2020-03-11 16:25:53 +0300
commit282a93554fbf919ff553d839eeea98abe1f861d4 (patch)
treee125965d246afa836f2d7d6b4158f1cd2a47efee
parent953aece84866a89bd3de8f6d3f5d30e2f9cfb4f3 (diff)
downloadpleroma-282a93554fbf919ff553d839eeea98abe1f861d4.tar.gz
pleroma-282a93554fbf919ff553d839eeea98abe1f861d4.zip
merging release default config on app start
-rw-r--r--lib/mix/tasks/pleroma/docs.ex2
-rw-r--r--lib/pleroma/application.ex1
-rw-r--r--lib/pleroma/config/holder.ex38
-rw-r--r--lib/pleroma/config/loader.ex32
-rw-r--r--lib/pleroma/config/transfer_task.ex2
-rw-r--r--lib/pleroma/docs/json.ex2
-rw-r--r--lib/pleroma/web/admin_api/admin_api_controller.ex2
-rw-r--r--test/config/holder_test.exs16
-rw-r--r--test/config/loader_test.exs19
-rw-r--r--test/config/transfer_task_test.exs2
10 files changed, 58 insertions, 58 deletions
diff --git a/lib/mix/tasks/pleroma/docs.ex b/lib/mix/tasks/pleroma/docs.ex
index 3c870f876..6088fc71d 100644
--- a/lib/mix/tasks/pleroma/docs.ex
+++ b/lib/mix/tasks/pleroma/docs.ex
@@ -28,7 +28,7 @@ defmodule Mix.Tasks.Pleroma.Docs do
defp do_run(implementation) do
start_pleroma()
- with descriptions <- Pleroma.Config.Loader.load("config/description.exs"),
+ with descriptions <- Pleroma.Config.Loader.read("config/description.exs"),
{:ok, file_path} <-
Pleroma.Docs.Generator.process(
implementation,
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex
index 18854b850..c5b9a98fd 100644
--- a/lib/pleroma/application.ex
+++ b/lib/pleroma/application.ex
@@ -31,6 +31,7 @@ defmodule Pleroma.Application do
# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more information on OTP Applications
def start(_type, _args) do
+ Pleroma.Config.Holder.to_ets()
Pleroma.HTML.compile_scrubbers()
Pleroma.Config.DeprecationWarnings.warn()
Pleroma.Plugs.HTTPSecurityPlug.warn_if_disabled()
diff --git a/lib/pleroma/config/holder.ex b/lib/pleroma/config/holder.ex
index f1a339703..88e1db313 100644
--- a/lib/pleroma/config/holder.ex
+++ b/lib/pleroma/config/holder.ex
@@ -3,14 +3,38 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Config.Holder do
- @config Pleroma.Config.Loader.load_and_merge()
+ @config Pleroma.Config.Loader.default_config()
- @spec config() :: keyword()
- def config, do: @config
+ @spec to_ets() :: true
+ def to_ets do
+ :ets.new(:default_config, [:named_table, :protected])
- @spec config(atom()) :: any()
- def config(group), do: @config[group]
+ default_config =
+ if System.get_env("RELEASE_NAME") do
+ release_config =
+ [:code.root_dir(), "releases", System.get_env("RELEASE_VSN"), "releases.exs"]
+ |> Path.join()
+ |> Pleroma.Config.Loader.read()
- @spec config(atom(), atom()) :: any()
- def config(group, key), do: @config[group][key]
+ Pleroma.Config.Loader.merge(@config, release_config)
+ else
+ @config
+ end
+
+ :ets.insert(:default_config, {:config, default_config})
+ end
+
+ @spec default_config() :: keyword()
+ def default_config, do: from_ets()
+
+ @spec default_config(atom()) :: keyword()
+ def default_config(group), do: Keyword.get(from_ets(), group)
+
+ @spec default_config(atom(), atom()) :: keyword()
+ def default_config(group, key), do: get_in(from_ets(), [group, key])
+
+ defp from_ets do
+ [{:config, default_config}] = :ets.lookup(:default_config, :config)
+ default_config
+ end
end
diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex
index df2d18725..b2cb34129 100644
--- a/lib/pleroma/config/loader.ex
+++ b/lib/pleroma/config/loader.ex
@@ -13,32 +13,22 @@ defmodule Pleroma.Config.Loader do
]
if Code.ensure_loaded?(Config.Reader) do
- @spec load(Path.t()) :: keyword()
- def load(path), do: Config.Reader.read!(path)
-
- defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2)
+ @reader Config.Reader
else
# support for Elixir less than 1.9
- @spec load(Path.t()) :: keyword()
- def load(path) do
- path
- |> Mix.Config.eval!()
- |> elem(0)
- end
-
- defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)
+ @reader Mix.Config
end
- @spec load_and_merge() :: keyword()
- def load_and_merge do
- all_paths =
- if Pleroma.Config.get(:release),
- do: ["config/config.exs", "config/releases.exs"],
- else: ["config/config.exs"]
+ @spec read(Path.t()) :: keyword()
+ def read(path), do: @reader.read!(path)
+
+ @spec merge(keyword(), keyword()) :: keyword()
+ def merge(c1, c2), do: @reader.merge(c1, c2)
- all_paths
- |> Enum.map(&load(&1))
- |> Enum.reduce([], &do_merge(&2, &1))
+ @spec default_config() :: keyword()
+ def default_config do
+ "config/config.exs"
+ |> read()
|> filter()
end
diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex
index 435fc7450..7c3449b5e 100644
--- a/lib/pleroma/config/transfer_task.ex
+++ b/lib/pleroma/config/transfer_task.ex
@@ -83,7 +83,7 @@ defmodule Pleroma.Config.TransferTask do
key = ConfigDB.from_string(setting.key)
group = ConfigDB.from_string(setting.group)
- default = Pleroma.Config.Holder.config(group, key)
+ default = Pleroma.Config.Holder.default_config(group, key)
value = ConfigDB.from_binary(setting.value)
merged_value =
diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex
index 6508a7bdb..74f8b2615 100644
--- a/lib/pleroma/docs/json.ex
+++ b/lib/pleroma/docs/json.ex
@@ -15,7 +15,7 @@ defmodule Pleroma.Docs.JSON do
end
def compile do
- with config <- Pleroma.Config.Loader.load("config/description.exs") do
+ with config <- Pleroma.Config.Loader.read("config/description.exs") do
config[:pleroma][:config_description]
|> Pleroma.Docs.Generator.convert_to_strings()
|> Jason.encode!()
diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex
index de0755ee5..47b7d2da3 100644
--- a/lib/pleroma/web/admin_api/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/admin_api_controller.ex
@@ -834,7 +834,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
configs = ConfigDB.get_all_as_keyword()
merged =
- Config.Holder.config()
+ Config.Holder.default_config()
|> ConfigDB.merge(configs)
|> Enum.map(fn {group, values} ->
Enum.map(values, fn {key, value} ->
diff --git a/test/config/holder_test.exs b/test/config/holder_test.exs
index 2368d4856..15d48b5c7 100644
--- a/test/config/holder_test.exs
+++ b/test/config/holder_test.exs
@@ -7,8 +7,8 @@ defmodule Pleroma.Config.HolderTest do
alias Pleroma.Config.Holder
- test "config/0" do
- config = Holder.config()
+ test "default_config/0" do
+ config = Holder.default_config()
assert config[:pleroma][Pleroma.Uploaders.Local][:uploads] == "test/uploads"
assert config[:tesla][:adapter] == Tesla.Mock
@@ -20,15 +20,15 @@ defmodule Pleroma.Config.HolderTest do
refute config[:phoenix][:serve_endpoints]
end
- test "config/1" do
- pleroma_config = Holder.config(:pleroma)
+ test "default_config/1" do
+ pleroma_config = Holder.default_config(:pleroma)
assert pleroma_config[Pleroma.Uploaders.Local][:uploads] == "test/uploads"
- tesla_config = Holder.config(:tesla)
+ tesla_config = Holder.default_config(:tesla)
assert tesla_config[:adapter] == Tesla.Mock
end
- test "config/2" do
- assert Holder.config(:pleroma, Pleroma.Uploaders.Local) == [uploads: "test/uploads"]
- assert Holder.config(:tesla, :adapter) == Tesla.Mock
+ test "default_config/2" do
+ assert Holder.default_config(:pleroma, Pleroma.Uploaders.Local) == [uploads: "test/uploads"]
+ assert Holder.default_config(:tesla, :adapter) == Tesla.Mock
end
end
diff --git a/test/config/loader_test.exs b/test/config/loader_test.exs
index 4c93e5d4d..607572f4e 100644
--- a/test/config/loader_test.exs
+++ b/test/config/loader_test.exs
@@ -7,28 +7,13 @@ defmodule Pleroma.Config.LoaderTest do
alias Pleroma.Config.Loader
- test "load/1" do
- config = Loader.load("test/fixtures/config/temp.secret.exs")
+ test "read/1" do
+ config = Loader.read("test/fixtures/config/temp.secret.exs")
assert config[:pleroma][:first_setting][:key] == "value"
assert config[:pleroma][:first_setting][:key2] == [Pleroma.Repo]
assert config[:quack][:level] == :info
end
- test "load_and_merge/0" do
- config = Loader.load_and_merge()
-
- refute config[:pleroma][Pleroma.Repo]
- refute config[:pleroma][Pleroma.Web.Endpoint]
- refute config[:pleroma][:env]
- refute config[:pleroma][:configurable_from_database]
- refute config[:pleroma][:database]
- refute config[:phoenix][:serve_endpoints]
-
- assert config[:pleroma][:ecto_repos] == [Pleroma.Repo]
- assert config[:pleroma][Pleroma.Uploaders.Local][:uploads] == "test/uploads"
- assert config[:tesla][:adapter] == Tesla.Mock
- end
-
test "filter_group/2" do
assert Loader.filter_group(:pleroma,
pleroma: [
diff --git a/test/config/transfer_task_test.exs b/test/config/transfer_task_test.exs
index ce31d1e87..01d04761d 100644
--- a/test/config/transfer_task_test.exs
+++ b/test/config/transfer_task_test.exs
@@ -70,7 +70,7 @@ defmodule Pleroma.Config.TransferTaskTest do
assert Application.get_env(:quack, :level) == :info
assert Application.get_env(:quack, :meta) == [:none]
- default = Pleroma.Config.Holder.config(:quack, :webhook_url)
+ default = Pleroma.Config.Holder.default_config(:quack, :webhook_url)
assert Application.get_env(:quack, :webhook_url) == default
on_exit(fn ->