From 7ffef07278e94bd3c268ee5cbd5c9c11cbfa3270 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Wed, 15 Jul 2026 19:25:27 -0500 Subject: fix: allow clearing a repository description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit metadataInputForSave assigned nil through the dictionary subscript to clear a description. Swift removes the key on a nil subscript assignment, so the mutation was sent with no `description` field and the old value survived — clearing a description silently did nothing. Store the nil with updateValue so the key is retained; AnyCodable already encodes an unmatched value as a JSON null. --- Hutch/Views/Repositories/RepositorySettingsViewModel.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Hutch') diff --git a/Hutch/Views/Repositories/RepositorySettingsViewModel.swift b/Hutch/Views/Repositories/RepositorySettingsViewModel.swift index 6ad6a78..dd8d7a1 100644 --- a/Hutch/Views/Repositories/RepositorySettingsViewModel.swift +++ b/Hutch/Views/Repositories/RepositorySettingsViewModel.swift @@ -301,7 +301,14 @@ final class RepositorySettingsViewModel { } if normalizedEditedDescription != (repository.description ?? "") { - input["description"] = normalizedEditedDescription.isEmpty ? Optional.none as String? : normalizedEditedDescription + if normalizedEditedDescription.isEmpty { + // Assigning nil through the subscript would remove the key and omit + // `description` from the mutation, leaving the old value in place. + // updateValue stores an explicit nil, which AnyCodable encodes as null. + input.updateValue(Optional.none as any Sendable, forKey: "description") + } else { + input["description"] = normalizedEditedDescription + } } return input -- cgit v1.2.3