@@ -40,7 +40,7 @@ class GitPanelService: ObservableObject {
4040 branches = try gitService. branches ( in: containerName)
4141 errorMessage = nil
4242 } catch {
43- errorMessage = error. localizedDescription
43+ reportFailure ( action : " refresh " , userMessage : error. localizedDescription, error : error )
4444 }
4545 }
4646
@@ -51,7 +51,7 @@ class GitPanelService: ObservableObject {
5151 try gitService. add ( files: files, in: containerName)
5252 await refresh ( )
5353 } catch {
54- errorMessage = error. localizedDescription
54+ reportFailure ( action : " stage " , userMessage : error. localizedDescription, error : error )
5555 }
5656 }
5757
@@ -62,7 +62,7 @@ class GitPanelService: ObservableObject {
6262 try gitService. addAll ( in: containerName)
6363 await refresh ( )
6464 } catch {
65- errorMessage = error. localizedDescription
65+ reportFailure ( action : " stageAll " , userMessage : error. localizedDescription, error : error )
6666 }
6767 }
6868
@@ -73,7 +73,7 @@ class GitPanelService: ObservableObject {
7373 try gitService. commit ( message: message, in: containerName)
7474 await refresh ( )
7575 } catch {
76- errorMessage = error. localizedDescription
76+ reportFailure ( action : " commit " , userMessage : error. localizedDescription, error : error )
7777 }
7878 }
7979
@@ -84,7 +84,7 @@ class GitPanelService: ObservableObject {
8484 try gitService. commitAll ( message: message, in: containerName)
8585 await refresh ( )
8686 } catch {
87- errorMessage = error. localizedDescription
87+ reportFailure ( action : " commitAll " , userMessage : error. localizedDescription, error : error )
8888 }
8989 }
9090
@@ -95,7 +95,7 @@ class GitPanelService: ObservableObject {
9595 try gitService. createAndCheckoutBranch ( name: name, in: containerName)
9696 await refresh ( )
9797 } catch {
98- errorMessage = error. localizedDescription
98+ reportFailure ( action : " createBranch " , userMessage : error. localizedDescription, error : error )
9999 }
100100 }
101101
@@ -106,7 +106,7 @@ class GitPanelService: ObservableObject {
106106 try gitService. checkout ( branch: branch, in: containerName)
107107 await refresh ( )
108108 } catch {
109- errorMessage = error. localizedDescription
109+ reportFailure ( action : " checkout " , userMessage : error. localizedDescription, error : error )
110110 }
111111 }
112112
@@ -117,7 +117,8 @@ class GitPanelService: ObservableObject {
117117 try gitService. push ( in: containerName)
118118 await refresh ( )
119119 } catch {
120- errorMessage = mapRemoteActionError ( error, action: . push)
120+ let message = mapRemoteActionError ( error, action: . push)
121+ reportFailure ( action: " push " , userMessage: message, error: error)
121122 }
122123 }
123124
@@ -130,11 +131,13 @@ class GitPanelService: ObservableObject {
130131 } catch {
131132 if isPullConflictError ( error) {
132133 let conflictedFiles = ( try ? gitService. conflictedFiles ( in: containerName) ) ?? [ ]
133- errorMessage = pullConflictGuidance ( conflictedFiles: conflictedFiles)
134+ let message = pullConflictGuidance ( conflictedFiles: conflictedFiles)
135+ reportFailure ( action: " pull " , userMessage: message, error: error)
134136 return
135137 }
136138
137- errorMessage = mapRemoteActionError ( error, action: . pull)
139+ let message = mapRemoteActionError ( error, action: . pull)
140+ reportFailure ( action: " pull " , userMessage: message, error: error)
138141 }
139142 }
140143
@@ -155,10 +158,15 @@ class GitPanelService: ObservableObject {
155158 } catch {
156159 selectedDiffTitle = " Diff · \( path) "
157160 selectedDiff = " Failed to load diff: \( error. localizedDescription) "
158- errorMessage = error. localizedDescription
161+ reportFailure ( action : " loadDiff " , userMessage : error. localizedDescription, error : error )
159162 }
160163 }
161164
165+ private func reportFailure( action: String , userMessage: String , error: Error ) {
166+ errorMessage = userMessage
167+ AppLogStore . shared. append ( " GitPanel \( action) failed: \( userMessage) [raw= \( error. localizedDescription) ] " )
168+ }
169+
162170 func showUntrackedDiffPlaceholder( for path: String ) {
163171 selectedDiffTitle = " Untracked · \( path) "
164172 selectedDiff = " Untracked files have no git diff until staged. "
0 commit comments