]> Kevux Git Server - rit/commitdiff
git-gui: remove EOL translation for gets
authorMark Levedahl <mlevedahl@gmail.com>
Thu, 22 May 2025 01:13:27 +0000 (21:13 -0400)
committerMark Levedahl <mlevedahl@gmail.com>
Thu, 31 Jul 2025 17:50:59 +0000 (13:50 -0400)
git-gui configures '-translation lf' on a number of channels. The
default configuration is 'auto', which on input changes any occurrence
of \n, \r, or \r\n to \n, and on output changes any such EOL sequence to
a platform dependent value (\n on Unix, \r\n on Windows). Such
translation can be necessary, but much of what is configured now is
redundant.

In particular, many of the channels configured this way are then
consumed by gets, which already recognizes any of \n, \r, or \r\n as
terminators.  Configuring a channel to first change these line endings,
then give the result to gets, is redundant.

The valid uses of -translation lf are for output where we do not want
\r\n on Windows, and for consuming entire files without going through
gets, assuring that \n will be used internally. Let's remove all the
others that only serve to confuse.

lib/diff.tcl must have -translation lf because \r\n might be stored in
the repository (e.g., on Windows, with no crlf translation enabled), and
git will treat \n as the line ending, while the preceding \r is just
whitespace, and these may be split by ANSI color coding. git-gui's
read_diff handles this correctly as-is.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
lib/blame.tcl
lib/choose_rev.tcl
lib/commit.tcl
lib/diff.tcl
lib/remote_branch_delete.tcl

index bb67b04..22c5e7a 100644 (file)
@@ -492,7 +492,6 @@ method _load {jump} {
        }
        fconfigure $fd \
                -blocking 0 \
-               -translation lf \
                -encoding [get_path_encoding $path]
        fileevent $fd readable [cb _read_file $fd $jump]
        set current_fd $fd
@@ -619,7 +618,7 @@ method _exec_blame {cur_w cur_d options cur_s} {
 
        lappend options -- $path
        set fd [git_read_nice [concat blame $options]]
-       fconfigure $fd -blocking 0 -translation lf -encoding utf-8
+       fconfigure $fd -blocking 0 -encoding utf-8
        fileevent $fd readable [cb _read_blame $fd $cur_w $cur_d]
        set current_fd $fd
        set blame_lines 0
@@ -985,7 +984,7 @@ method _showcommit {cur_w lno} {
                        set msg {}
                        catch {
                                set fd [git_read [list cat-file commit $cmit]]
-                               fconfigure $fd -encoding iso8859-1 -translation lf
+                               fconfigure $fd -encoding iso8859-1
                                # By default commits are assumed to be in utf-8
                                set enc utf-8
                                while {[gets $fd line] > 0} {
index 4cf6ceb..cd355cc 100644 (file)
@@ -147,7 +147,7 @@ constructor _new {path unmerged_only title} {
                refs/remotes \
                refs/tags \
                ]]
-       fconfigure $fr_fd -translation lf -encoding utf-8
+       fconfigure $fr_fd -encoding utf-8
        while {[gets $fr_fd line] > 0} {
                set line [eval $line]
                if {[lindex $line 1 0] eq {tag}} {
index adde708..5e77fd2 100644 (file)
@@ -28,7 +28,7 @@ You are currently in the middle of a merge that has not been fully completed.  Y
                        set name ""
                        set email ""
                        set fd [git_read [list cat-file commit $curHEAD]]
-                       fconfigure $fd -encoding iso8859-1 -translation lf
+                       fconfigure $fd -encoding iso8859-1
                        # By default commits are assumed to be in utf-8
                        set enc utf-8
                        while {[gets $fd line] > 0} {
@@ -361,7 +361,7 @@ proc commit_committree {fd_wt curHEAD msg_p} {
        #
        if {$commit_type eq {normal}} {
                set fd_ot [git_read [list cat-file commit $PARENT]]
-               fconfigure $fd_ot -encoding iso8859-1 -translation lf
+               fconfigure $fd_ot -encoding iso8859-1
                set old_tree [gets $fd_ot]
                close $fd_ot
 
index 65d0997..442737b 100644 (file)
@@ -324,6 +324,8 @@ proc start_show_diff {cont_info {add_opts {}}} {
        # '++' lines which is not bijective. Thus, we need to maintain a state
        # across lines.
        set ::conflict_in_pre_image 0
+
+       # git-diff has eol==\n, \r if present is part of the text
        fconfigure $fd \
                -blocking 0 \
                -encoding [get_path_encoding $path] \
index 349d31e..f0814ef 100644 (file)
@@ -307,7 +307,6 @@ method _load {cache uri} {
                set active_ls [git_read [list ls-remote $uri]]
                fconfigure $active_ls \
                        -blocking 0 \
-                       -translation lf \
                        -encoding utf-8
                fileevent $active_ls readable [cb _read $cache $active_ls]
        } else {