Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions gitk-git/gitk
Original file line number Diff line number Diff line change
Expand Up @@ -3788,6 +3788,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
Expand Down Expand Up @@ -3818,8 +3846,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]
Expand Down
Loading