]> git.ipfire.org Git - thirdparty/git.git/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 bb67b047eb558375de2af65717cd36072d6688dd..22c5e7a193ea09b0f5a032478ab7e09bc98e6898 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 4cf6cebac433b14d303aeaa556298455ae267fb7..cd355cc92a276c9c6bd7eb51483af5e5224a8e3d 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 adde7080847c1d996a982c7f369f2d10901a4ae6..5e77fd2f5495ab0c1fcca881c40992b7fee9de16 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 65d0997b79b55533a849df88fb2a2030b1dbbd11..442737ba4f260b16856d0cea8ae584d582d129b1 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 349d31edf3e1c7e77778d2e8a037976ae1b7d555..f0814efdd7383e29b4b52b8020a5c6212b5cebb1 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 {