X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fconfig%2Floader.ex;h=df2d18725bc59cd9dd94aeb7e230052cefab66c9;hb=6ceef768cba23ab79a5545330746c7d8ce97ed64;hp=b13b6eaf487d7a39e834ad152c01fc4bd40ea8aa;hpb=503d966e9f7d4c41a1bfbd215b375443a858564a;p=akkoma diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex index b13b6eaf4..df2d18725 100644 --- a/lib/pleroma/config/loader.ex +++ b/lib/pleroma/config/loader.ex @@ -1,5 +1,16 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Config.Loader do - @paths ["config/config.exs", "config/#{Mix.env()}.exs"] + @reject_keys [ + Pleroma.Repo, + Pleroma.Web.Endpoint, + :env, + :configurable_from_database, + :database, + :swarm + ] if Code.ensure_loaded?(Config.Reader) do @spec load(Path.t()) :: keyword() @@ -10,8 +21,9 @@ defmodule Pleroma.Config.Loader do # support for Elixir less than 1.9 @spec load(Path.t()) :: keyword() def load(path) do - {config, _paths} = Mix.Config.eval!(path) - config + path + |> Mix.Config.eval!() + |> elem(0) end defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2) @@ -21,19 +33,25 @@ defmodule Pleroma.Config.Loader do def load_and_merge do all_paths = if Pleroma.Config.get(:release), - do: @paths ++ ["config/releases.exs"], - else: @paths + do: ["config/config.exs", "config/releases.exs"], + else: ["config/config.exs"] all_paths |> Enum.map(&load(&1)) - |> merge() + |> Enum.reduce([], &do_merge(&2, &1)) + |> filter() end - @spec merge([keyword()], keyword()) :: keyword() - def merge(configs, acc \\ []) - def merge([], acc), do: acc + defp filter(configs) do + configs + |> Keyword.keys() + |> Enum.reduce([], &Keyword.put(&2, &1, filter_group(&1, configs))) + end - def merge([config | others], acc) do - merge(others, do_merge(acc, config)) + @spec filter_group(atom(), keyword()) :: keyword() + def filter_group(group, configs) do + Enum.reject(configs[group], fn {key, _v} -> + key in @reject_keys or (group == :phoenix and key == :serve_endpoints) + end) end end