@@ -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+
37903818proc 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