aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes3
-rwxr-xr-xgit-gui.sh13
-rw-r--r--lib/blame.tcl5
-rw-r--r--lib/diff.tcl9
4 files changed, 26 insertions, 4 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..f96112d47
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+* encoding=US-ASCII
+git-gui.sh encoding=UTF-8
+/po/*.po encoding=UTF-8
diff --git a/git-gui.sh b/git-gui.sh
index cb0fcac99..4a762355d 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -521,6 +521,19 @@ proc kill_file_process {fd} {
}
}
+proc gitattr {path attr default} {
+ if {[catch {set r [git check-attr $attr -- $path]}]} {
+ set r unspecified
+ } else {
+ set r [join [lrange [split $r :] 2 end] :]
+ regsub {^ } $r {} r
+ }
+ if {$r eq {unspecified}} {
+ return $default
+ }
+ return $r
+}
+
proc sq {value} {
regsub -all ' $value "'\\''" value
return "'$value'"
diff --git a/lib/blame.tcl b/lib/blame.tcl
index 0d635cd3a..9464a599d 100644
--- a/lib/blame.tcl
+++ b/lib/blame.tcl
@@ -399,7 +399,10 @@ method _load {jump} {
} else {
set fd [git_read cat-file blob "$commit:$path"]
}
- fconfigure $fd -blocking 0 -translation lf -encoding binary
+ fconfigure $fd \
+ -blocking 0 \
+ -translation lf \
+ -encoding [tcl_encoding [gitattr $path encoding UTF-8]]
fileevent $fd readable [cb _read_file $fd $jump]
set current_fd $fd
}
diff --git a/lib/diff.tcl b/lib/diff.tcl
index a30c80a93..b0ecfbcb5 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -164,8 +164,11 @@ proc show_other_diff {path w m scroll_pos} {
set sz [string length $content]
}
file {
+ set enc [gitattr $path encoding UTF-8]
set fd [open $path r]
- fconfigure $fd -eofchar {}
+ fconfigure $fd \
+ -eofchar {} \
+ -encoding [tcl_encoding $enc]
set content [read $fd $max_sz]
close $fd
set sz [file size $path]
@@ -279,8 +282,8 @@ proc start_show_diff {scroll_pos {add_opts {}}} {
set ::current_diff_inheader 1
fconfigure $fd \
-blocking 0 \
- -encoding binary \
- -translation binary
+ -encoding [tcl_encoding [gitattr $path encoding UTF-8]] \
+ -translation lf
fileevent $fd readable [list read_diff $fd $scroll_pos]
}