merging release default config on app start

This commit is contained in:
Alexander Strizhakov 2020-03-11 16:25:53 +03:00
commit 282a93554f
No known key found for this signature in database
GPG key ID: 022896A53AEF1381
10 changed files with 58 additions and 58 deletions

View file

@ -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

View file

@ -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)
all_paths
|> Enum.map(&load(&1))
|> Enum.reduce([], &do_merge(&2, &1))
@spec merge(keyword(), keyword()) :: keyword()
def merge(c1, c2), do: @reader.merge(c1, c2)
@spec default_config() :: keyword()
def default_config do
"config/config.exs"
|> read()
|> filter()
end

View file

@ -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 =