diff --git a/supacodeTests/GitWtWorktreeEntryTests.swift b/supacodeTests/GitWtWorktreeEntryTests.swift --- a/supacodeTests/GitWtWorktreeEntryTests.swift +++ b/supacodeTests/GitWtWorktreeEntryTests.swift @@ -23,7 +23,7 @@ GitWtWorktreeEntry(branch: "(bare)", path: "/tmp/repo.git", head: "", isBare: true), GitWtWorktreeEntry(branch: "main", path: "/tmp/worktree", head: "abc123", isBare: false), ] - let filtered = GitWtWorktreeEntry.filteringBare(entries) + let filtered = entries.filter { !$0.isBare } #expect(filtered.count == 1) #expect(filtered.first?.branch == "main") } diff --git a/supacode/Clients/Git/GitClient.swift b/supacode/Clients/Git/GitClient.swift --- a/supacode/Clients/Git/GitClient.swift +++ b/supacode/Clients/Git/GitClient.swift @@ -67,9 +67,8 @@ return [] } let data = Data(trimmed.utf8) - let entries = GitWtWorktreeEntry.filteringBare( - try JSONDecoder().decode([GitWtWorktreeEntry].self, from: data) - ) + let entries = try JSONDecoder().decode([GitWtWorktreeEntry].self, from: data) + .filter { !$0.isBare } let worktreeEntries = entries.enumerated().map { index, entry in let worktreeURL = URL(fileURLWithPath: entry.path).standardizedFileURL let name = entry.branch.isEmpty ? worktreeURL.lastPathComponent : entry.branch @@ -575,7 +574,4 @@ case isBare = "is_bare" } - static func filteringBare(_ entries: [GitWtWorktreeEntry]) -> [GitWtWorktreeEntry] { - entries.filter { !$0.isBare } - } } diff --git a/supacode/Features/RepositorySettings/Reducer/RepositorySettingsFeature.swift b/supacode/Features/RepositorySettings/Reducer/RepositorySettingsFeature.swift --- a/supacode/Features/RepositorySettings/Reducer/RepositorySettingsFeature.swift +++ b/supacode/Features/RepositorySettings/Reducer/RepositorySettingsFeature.swift @@ -59,9 +59,20 @@ } case .settingsLoaded(let settings, let isBareRepository): - state.settings = settings + var updatedSettings = settings + if isBareRepository { + updatedSettings.copyIgnoredOnWorktreeCreate = false + updatedSettings.copyUntrackedOnWorktreeCreate = false + } + state.settings = updatedSettings state.isBareRepository = isBareRepository - return .none + guard isBareRepository, updatedSettings != settings else { return .none } + let rootURL = state.rootURL + let repositorySettingsClient = repositorySettingsClient + return .run { send in + repositorySettingsClient.save(updatedSettings, rootURL) + await send(.delegate(.settingsChanged(rootURL))) + } case .branchDataLoaded(let branches, let defaultBaseRef): state.defaultWorktreeBaseRef = defaultBaseRef @@ -107,6 +118,7 @@ } case .setCopyIgnoredOnWorktreeCreate(let isEnabled): + guard !state.isBareRepository else { return .none } state.settings.copyIgnoredOnWorktreeCreate = isEnabled let settings = state.settings let rootURL = state.rootURL @@ -117,6 +129,7 @@ } case .setCopyUntrackedOnWorktreeCreate(let isEnabled): + guard !state.isBareRepository else { return .none } state.settings.copyUntrackedOnWorktreeCreate = isEnabled let settings = state.settings let rootURL = state.rootURL diff --git a/supacode/Features/Settings/Views/RepositorySettingsView.swift b/supacode/Features/Settings/Views/RepositorySettingsView.swift --- a/supacode/Features/Settings/Views/RepositorySettingsView.swift +++ b/supacode/Features/Settings/Views/RepositorySettingsView.swift @@ -46,6 +46,7 @@ set: { store.send(.setCopyIgnoredOnWorktreeCreate($0)) } ) ) + .disabled(store.isBareRepository) Toggle( "Copy untracked files to new worktrees", isOn: Binding( @@ -53,6 +54,7 @@ set: { store.send(.setCopyUntrackedOnWorktreeCreate($0)) } ) ) + .disabled(store.isBareRepository) if store.isBareRepository { Text("Copy flags are ignored for bare repositories.") .foregroundStyle(.secondary)