From ce8b2276c290240205a074fdc0771e8bf4b3db92 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 27 Oct 2026 18:14:34 +0400 Subject: [PATCH] fix(migration): leave ConfigDB upload configs without filters alone Keyword.update/4 added filters: [] to a Pleroma.Upload ConfigDB entry without a :filters key, which would hide the filters from the config file, GPS stripping included. Only rewrite lists that change. --- ...7000000_upload_filter_exiftool_to_exif.exs | 26 +++++++++---------- .../upload_filter_exiftool_to_exif_test.exs | 9 +++++++ 2 files changed, 22 insertions(+), 13 deletions(-) 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