@matheusbsbs / matheus-bagliano / commits / 06569cd5be
Fork 0

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