diff --git a/priv/repo/migrations/20261027000000_upload_filter_exiftool_to_exif.exs b/priv/repo/migrations/20261027000000_upload_filter_exiftool_to_exif.exs index 62392f957..4e737e859 100644 --- a/priv/repo/migrations/20261027000000_upload_filter_exiftool_to_exif.exs +++ b/priv/repo/migrations/20261027000000_upload_filter_exiftool_to_exif.exs @@ -22,20 +22,20 @@ defmodule Pleroma.Repo.Migrations.UploadFilterExiftoolToExif do def down, do: rename_filters(@down) + # Only touch configs that list filters: adding an empty list would hide the + # filters from the config file. defp rename_filters(renames) do - case ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}) do - %{value: value} -> - new_value = - Keyword.update(value, :filters, [], fn filters -> - filters - |> Enum.map(&Map.get(renames, &1, &1)) - |> Enum.uniq() - end) - - ConfigDB.update_or_create(%{group: :pleroma, key: Pleroma.Upload, value: new_value}) - - _ -> - nil + with %{value: value} <- ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}), + filters when is_list(filters) <- value[:filters], + new_filters when new_filters != filters <- + filters |> Enum.map(&Map.get(renames, &1, &1)) |> Enum.uniq() do + ConfigDB.update_or_create(%{ + group: :pleroma, + key: Pleroma.Upload, + value: Keyword.put(value, :filters, new_filters) + }) + else + _ -> nil end end end diff --git a/test/pleroma/repo/migrations/upload_filter_exiftool_to_exif_test.exs b/test/pleroma/repo/migrations/upload_filter_exiftool_to_exif_test.exs index 9d39c6ea6..0fdf26961 100644 --- a/test/pleroma/repo/migrations/upload_filter_exiftool_to_exif_test.exs +++ b/test/pleroma/repo/migrations/upload_filter_exiftool_to_exif_test.exs @@ -61,4 +61,13 @@ defmodule Pleroma.Repo.Migrations.UploadFilterExiftoolToExifTest do assert migration.up() == nil assert ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}) == nil end + + test "up/0 does not add filters to a database config without them", %{migration: migration} do + insert(:config, group: :pleroma, key: Pleroma.Upload, value: [uploader: Pleroma.Uploaders.S3]) + + migration.up() + + value = ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}).value + assert value == [uploader: Pleroma.Uploaders.S3] + end end