]> git.ipfire.org Git - thirdparty/git.git/commitdiff
gitk: show unescaped file names on 'rename' and 'copy' lines
authorJohannes Sixt <j6t@kdbg.org>
Thu, 6 Nov 2025 09:42:37 +0000 (10:42 +0100)
committerJohannes Sixt <j6t@kdbg.org>
Thu, 6 Nov 2025 09:59:02 +0000 (10:59 +0100)
When a file is selected in the file list, the diff window scrolls to the
corresponding section. The administrative data needed for this purpose
is extracted from the 'rename from', 'rename to', and 'copy to' lines.
Escaped file names are unescaped for this purpose. However, the lines
shown in the diff window are left in the escaped form. This is not very
pleasing. Replace the escaped form by the unescaped form.

Add a section to treat the 'copy from' case.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
gitk

diff --git a/gitk b/gitk
index eb657aa1e491b4f91382f7a9e25fe826834ef1eb..9e4f113c9bc1428e20dabfc66e1e20962180e76b 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -8401,6 +8401,7 @@ proc parseblobdiffline {ids line} {
             if {$i >= 0} {
                 setinlist difffilestart $i $curdiffstart
             }
+            set line "rename from $fname"
         } elseif {![string compare -length 10 $line "rename to "] ||
                   ![string compare -length 8 $line "copy to "]} {
             set fname [string range $line [expr 4 + [string first " to " $line] ] end]
@@ -8408,6 +8409,13 @@ proc parseblobdiffline {ids line} {
                 set fname [lindex $fname 0]
             }
             makediffhdr $fname $ids
+            set line "[lindex $line 0] to $fname"
+        } elseif {![string compare -length 10 $line "copy from "]} {
+            set fname [string range $line 10 end]
+            if {[string index $fname 0] eq "\""} {
+                set fname [lindex $fname 0]
+            }
+            set line "copy from $fname"
         } elseif {[string compare -length 3 $line "---"] == 0} {
             # do nothing
             return