mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'tb/external-diff-renamed'
* tb/external-diff-renamed: gitk: add external diff file rename detection
This commit is contained in:
40
gitk
40
gitk
@@ -3787,6 +3787,34 @@ proc external_diff_get_one_file {diffid filename diffdir} {
|
|||||||
"revision $diffid"]
|
"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 {} {
|
proc external_diff {} {
|
||||||
global nullid nullid2
|
global nullid nullid2
|
||||||
global flist_menu_file
|
global flist_menu_file
|
||||||
@@ -3817,8 +3845,16 @@ proc external_diff {} {
|
|||||||
if {$diffdir eq {}} return
|
if {$diffdir eq {}} return
|
||||||
|
|
||||||
# gather files to diff
|
# gather files to diff
|
||||||
set difffromfile [external_diff_get_one_file $diffidfrom $flist_menu_file $diffdir]
|
set renames [check_for_renames_in_diff $flist_menu_file]
|
||||||
set difftofile [external_diff_get_one_file $diffidto $flist_menu_file $diffdir]
|
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 {}} {
|
if {$difffromfile ne {} && $difftofile ne {}} {
|
||||||
set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]
|
set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]
|
||||||
|
|||||||
Reference in New Issue
Block a user