Merge branch 'tb/external-diff-renamed'
* tb/external-diff-renamed: gitk: add external diff file rename detectionmain
commit
776223c4d8
40
gitk
40
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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue