aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2025-11-26 16:04:14 +0100
committerJohannes Sixt <j6t@kdbg.org>2025-11-26 16:04:14 +0100
commit776223c4d8482a29585266e189ea8f1933ac9652 (patch)
tree090436b9763a8b470d1801f51f290f0aade0c422
parentbd3fd7e77c3ee3a45baebaed54fabd2d49b75a4d (diff)
parentbdb1cf831251b16d174f742178caac181add87f4 (diff)
downloadgit-776223c4d8482a29585266e189ea8f1933ac9652.tar.xz
Merge branch 'tb/external-diff-renamed'
* tb/external-diff-renamed: gitk: add external diff file rename detection
-rwxr-xr-xgitk40
1 files changed, 38 insertions, 2 deletions
diff --git a/gitk b/gitk
index f456af823e..7f62c8041d 100755
--- a/gitk
+++ b/gitk
@@ -3787,6 +3787,34 @@ proc external_diff_get_one_file {diffid filename diffdir} {
"revision $diffid"]
}
+proc check_for_renames_in_diff {filepath} { # renames
+ global difffilestart ctext
+
+ set filename [file tail $filepath]
+ set renames {}
+
+ foreach loc $difffilestart {
+ set loclineend [string map {.0 .end} $loc]
+ set fromlineloc "$loc + 2 lines"
+ set tolineloc "$loc + 3 lines"
+ set renfromline [$ctext get $fromlineloc [string map {.0 .end} $fromlineloc]]
+ set rentoline [$ctext get $tolineloc [string map {.0 .end} $tolineloc]]
+ if {[string equal -length 12 "rename from " $renfromline]
+ && [string equal -length 10 "rename to " $rentoline]} {
+ set renfrom [string range $renfromline 12 end]
+ set rento [string range $rentoline 10 end]
+ if {[string first $filename $renfrom] != -1
+ || [string first $filename $rento] != -1} {
+ lappend renames $renfrom
+ lappend renames $rento
+ break
+ }
+ }
+ }
+
+ return $renames
+}
+
proc external_diff {} {
global nullid nullid2
global flist_menu_file
@@ -3817,8 +3845,16 @@ proc external_diff {} {
if {$diffdir eq {}} return
# gather files to diff
- set difffromfile [external_diff_get_one_file $diffidfrom $flist_menu_file $diffdir]
- set difftofile [external_diff_get_one_file $diffidto $flist_menu_file $diffdir]
+ set renames [check_for_renames_in_diff $flist_menu_file]
+ set renamefrom [lindex $renames 0]
+ set renameto [lindex $renames 1]
+ if {$renamefrom ne {} && $renameto ne {}} {
+ set difffromfile [external_diff_get_one_file $diffidfrom $renamefrom $diffdir]
+ set difftofile [external_diff_get_one_file $diffidto $renameto $diffdir]
+ } else {
+ set difffromfile [external_diff_get_one_file $diffidfrom $flist_menu_file $diffdir]
+ set difftofile [external_diff_get_one_file $diffidto $flist_menu_file $diffdir]
+ }
if {$difffromfile ne {} && $difftofile ne {}} {
set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]