diff options
| author | rinpatch <rinpatch@sdf.org> | 2020-03-11 15:16:18 +0000 | 
|---|---|---|
| committer | rinpatch <rinpatch@sdf.org> | 2020-03-11 15:16:18 +0000 | 
| commit | 7cdabdc0dff3bae1c7209f50c609ebf154d25ea7 (patch) | |
| tree | 5ef577ef2fcedfd58bd188cc35955dea9fd83513 /lib | |
| parent | f92c447bbc38db417beb2ac505c17649c6de01d2 (diff) | |
| parent | fce090c1de543f0bcebf47cfc2a32f99f8ef401f (diff) | |
| download | pleroma-7cdabdc0dff3bae1c7209f50c609ebf154d25ea7.tar.gz pleroma-7cdabdc0dff3bae1c7209f50c609ebf154d25ea7.zip | |
Merge branch 'fix/1610-release-compilation-config-fix' into 'develop'
Merging default release config on app start
Closes #1610
See merge request pleroma/pleroma!2288
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mix/tasks/pleroma/docs.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/application.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/config/holder.ex | 33 | ||||
| -rw-r--r-- | lib/pleroma/config/loader.ex | 30 | ||||
| -rw-r--r-- | lib/pleroma/config/transfer_task.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/docs/json.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/admin_api/admin_api_controller.ex | 2 | 
7 files changed, 44 insertions, 28 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..33f1705df 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.save_default()      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..f037d5d48 100644 --- a/lib/pleroma/config/holder.ex +++ b/lib/pleroma/config/holder.ex @@ -3,14 +3,33 @@  # 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 save_default() :: :ok +  def save_default do +    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()) :: any() -  def config(group), do: @config[group] +        Pleroma.Config.Loader.merge(@config, release_config) +      else +        @config +      end -  @spec config(atom(), atom()) :: any() -  def config(group, key), do: @config[group][key] +    Pleroma.Config.put(:default_config, default_config) +  end + +  @spec default_config() :: keyword() +  def default_config, do: get_default() + +  @spec default_config(atom()) :: keyword() +  def default_config(group), do: Keyword.get(get_default(), group) + +  @spec default_config(atom(), atom()) :: keyword() +  def default_config(group, key), do: get_in(get_default(), [group, key]) + +  defp get_default, do: Pleroma.Config.get(:default_config)  end diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex index df2d18725..6ca6550bd 100644 --- a/lib/pleroma/config/loader.ex +++ b/lib/pleroma/config/loader.ex @@ -13,32 +13,28 @@ 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) +    @reader Config.Reader -    defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2) +    def read(path), do: @reader.read!(path)    else      # support for Elixir less than 1.9 -    @spec load(Path.t()) :: keyword() -    def load(path) do +    @reader Mix.Config +    def read(path) do        path -      |> Mix.Config.eval!() +      |> @reader.eval!()        |> elem(0)      end - -    defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)    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() + +  @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} -> | 
