krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

6e353462032937548e9661b85e97693d75e4f0bf

verified · cmc

author: Christian Cleberg <hello@cleberg.net> · 2026-04-02T03:51:32Z

add confirmation to repo rename
 .../Repositories/RepositorySettingsView.swift      | 28 ++++++++++++++++------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/Hutch/Views/Repositories/RepositorySettingsView.swift b/Hutch/Views/Repositories/RepositorySettingsView.swift
index ff72335..aca2ff9 100644
--- a/Hutch/Views/Repositories/RepositorySettingsView.swift
+++ b/Hutch/Views/Repositories/RepositorySettingsView.swift
@@ -10,6 +10,7 @@ struct RepositorySettingsView: View {
     @Environment(\.dismiss) private var dismiss
     @State private var viewModel: RepositorySettingsViewModel?
     @State private var showDeleteConfirmation = false
+    @State private var showRenameConfirmation = false
     @State private var pendingACLDeletion: ACLEntry?
     @State private var saveResultAlert: SaveResultAlert?
 
@@ -54,6 +55,25 @@ struct RepositorySettingsView: View {
             deleteSection(viewModel)
         }
         .srhtErrorBanner(error: $vm.error)
+        .alert(
+            "Rename repository to \(viewModel.editedName.trimmingCharacters(in: .whitespacesAndNewlines))?",
+            isPresented: $showRenameConfirmation
+        ) {
+            Button("Cancel", role: .cancel) {
+                // Alert dismissal is implicit; no additional action required.
+            }
+            Button("Rename", role: .destructive) {
+                Task {
+                    await viewModel.rename()
+                    if let newName = viewModel.updatedName {
+                        onRenamed(newName)
+                        dismiss()
+                    }
+                }
+            }
+        } message: {
+            Text("This will change the repository URL. Existing clones will be redirected but links may break.")
+        }
         .alert(
             "Permanently delete \(repository.owner.canonicalName)/\(repository.name)?",
             isPresented: $showDeleteConfirmation
@@ -168,13 +188,7 @@ struct RepositorySettingsView: View {
                 .foregroundStyle(.secondary)
 
             Button {
-                Task {
-                    await viewModel.rename()
-                    if let newName = viewModel.updatedName {
-                        onRenamed(newName)
-                        dismiss()
-                    }
-                }
+                showRenameConfirmation = true
             } label: {
                 if viewModel.isRenaming {
                     ProgressView()