git-gui: Fix post-commit status with subject in non-locale encoding
As pointed out in msysgit bug #181, when a non-locale encoding is used for commits, post-commit status messages display the subject incorrectly. It happens because the file handle is not properly configured before the subject is read back. This patch fixes it by factoring out the code that is used to setup the output handle into a separate function, and calling it from the reading code. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Acked-by: Robin Rosenberg <robin.rosenberg@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Alexander Gavrilov committed
Jan 24, 2009 at 00:18 UTC
06569cd5bef7c8e3925bd36870abc083ae7b93f8
1 file changed
+19
-10
lib/commit.tcl
+19
-10
@@ -115,6 +115,23 @@ proc create_new_commit {} {
115
rescan ui_ready
116
}
117
118
+proc setup_commit_encoding {msg_wt {quiet 0}} {
119
+ global repo_config
120
+
121
+ if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
122
+ set enc utf-8
123
+ }
124
+ set use_enc [tcl_encoding $enc]
125
+ if {$use_enc ne {}} {
126
+ fconfigure $msg_wt -encoding $use_enc
127
+ } else {
128
+ if {!$quiet} {
129
+ error_popup [mc "warning: Tcl does not support encoding '%s'." $enc]
130
+ }
131
+ fconfigure $msg_wt -encoding utf-8
132
+ }
133
+}
134
+
135
proc commit_tree {} {
136
global HEAD commit_type file_states ui_comm repo_config
137
global pch_error
@@ -200,16 +217,7 @@ A good commit message has the following format:
217
set msg_p [gitdir GITGUI_EDITMSG]
218
set msg_wt [open $msg_p w]
219
fconfigure $msg_wt -translation lf
203
- if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
204
- set enc utf-8
205
- }
206
- set use_enc [tcl_encoding $enc]
207
- if {$use_enc ne {}} {
208
- fconfigure $msg_wt -encoding $use_enc
209
- } else {
210
- error_popup [mc "warning: Tcl does not support encoding '%s'." $enc]
211
- fconfigure $msg_wt -encoding utf-8
212
- }
220
+ setup_commit_encoding $msg_wt
221
puts $msg_wt $msg
222
close $msg_wt
223
@@ -362,6 +370,7 @@ A rescan will be automatically started now.
370
append reflogm " ($commit_type)"
371
}
372
set msg_fd [open $msg_p r]
373
+ setup_commit_encoding $msg_fd 1
374
gets $msg_fd subject
375
close $msg_fd
376
append reflogm {: } $subject