Skip to content

Commit 776223c

Browse files
committed
Merge branch 'tb/external-diff-renamed'
* tb/external-diff-renamed: gitk: add external diff file rename detection
2 parents bd3fd7e + bdb1cf8 commit 776223c

1 file changed

Lines changed: 38 additions & 2 deletions

File tree

gitk

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3787,6 +3787,34 @@ proc external_diff_get_one_file {diffid filename diffdir} {
37873787
"revision $diffid"]
37883788
}
37893789
3790+
proc check_for_renames_in_diff {filepath} { # renames
3791+
global difffilestart ctext
3792+
3793+
set filename [file tail $filepath]
3794+
set renames {}
3795+
3796+
foreach loc $difffilestart {
3797+
set loclineend [string map {.0 .end} $loc]
3798+
set fromlineloc "$loc + 2 lines"
3799+
set tolineloc "$loc + 3 lines"
3800+
set renfromline [$ctext get $fromlineloc [string map {.0 .end} $fromlineloc]]
3801+
set rentoline [$ctext get $tolineloc [string map {.0 .end} $tolineloc]]
3802+
if {[string equal -length 12 "rename from " $renfromline]
3803+
&& [string equal -length 10 "rename to " $rentoline]} {
3804+
set renfrom [string range $renfromline 12 end]
3805+
set rento [string range $rentoline 10 end]
3806+
if {[string first $filename $renfrom] != -1
3807+
|| [string first $filename $rento] != -1} {
3808+
lappend renames $renfrom
3809+
lappend renames $rento
3810+
break
3811+
}
3812+
}
3813+
}
3814+
3815+
return $renames
3816+
}
3817+
37903818
proc external_diff {} {
37913819
global nullid nullid2
37923820
global flist_menu_file
@@ -3817,8 +3845,16 @@ proc external_diff {} {
38173845
if {$diffdir eq {}} return
38183846
38193847
# gather files to diff
3820-
set difffromfile [external_diff_get_one_file $diffidfrom $flist_menu_file $diffdir]
3821-
set difftofile [external_diff_get_one_file $diffidto $flist_menu_file $diffdir]
3848+
set renames [check_for_renames_in_diff $flist_menu_file]
3849+
set renamefrom [lindex $renames 0]
3850+
set renameto [lindex $renames 1]
3851+
if {$renamefrom ne {} && $renameto ne {}} {
3852+
set difffromfile [external_diff_get_one_file $diffidfrom $renamefrom $diffdir]
3853+
set difftofile [external_diff_get_one_file $diffidto $renameto $diffdir]
3854+
} else {
3855+
set difffromfile [external_diff_get_one_file $diffidfrom $flist_menu_file $diffdir]
3856+
set difftofile [external_diff_get_one_file $diffidto $flist_menu_file $diffdir]
3857+
}
38223858
38233859
if {$difffromfile ne {} && $difftofile ne {}} {
38243860
set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]

0 commit comments

Comments
 (0)