diff options
| author | Johannes Sixt <j6t@kdbg.org> | 2025-11-26 16:04:14 +0100 |
|---|---|---|
| committer | Johannes Sixt <j6t@kdbg.org> | 2025-11-26 16:04:14 +0100 |
| commit | 776223c4d8482a29585266e189ea8f1933ac9652 (patch) | |
| tree | 090436b9763a8b470d1801f51f290f0aade0c422 | |
| parent | bd3fd7e77c3ee3a45baebaed54fabd2d49b75a4d (diff) | |
| parent | bdb1cf831251b16d174f742178caac181add87f4 (diff) | |
| download | git-776223c4d8482a29585266e189ea8f1933ac9652.tar.xz | |
Merge branch 'tb/external-diff-renamed'
* tb/external-diff-renamed:
gitk: add external diff file rename detection
| -rwxr-xr-x | gitk | 40 |
1 files changed, 38 insertions, 2 deletions
@@ -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] |
