Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gitk: added external diff file rename detection #1774

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
33 changes: 31 additions & 2 deletions gitk-git/gitk
Original file line number Diff line number Diff line change
Expand Up @@ -3666,6 +3666,27 @@ proc external_diff_get_one_file {diffid filename diffdir} {
"revision $diffid"]
}

proc check_for_renames_in_diff {filepath} {
global ctext

set renamed_filenames [list {}]
set filename [file tail $filepath]
set rename_from_text_identifier_length 12
set rename_to_text_identifier_length 10
set reg_expr_rename_from {^rename from (.*$filename)}
set reg_expr_rename_from [subst -nobackslashes -nocommands $reg_expr_rename_from]
set reg_expr_rename_to {^rename to (.*)}
set rename_from_text_index [$ctext search -elide -regexp -- $reg_expr_rename_from 0.0]
if { ($rename_from_text_index != {})} {
set rename_to_text_index [$ctext search -elide -regexp -- $reg_expr_rename_to $rename_from_text_index]
if { ($rename_from_text_index != {}) && ($rename_to_text_index != {}) } {
lappend renamed_filenames [$ctext get "$rename_from_text_index + $rename_from_text_identifier_length chars" "$rename_from_text_index lineend"]
lappend renamed_filenames [$ctext get "$rename_to_text_index + $rename_to_text_identifier_length chars" "$rename_to_text_index lineend"]
}
}
return $renamed_filenames
}

proc external_diff {} {
global nullid nullid2
global flist_menu_file
Expand Down Expand Up @@ -3696,8 +3717,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 renamed_filenames [check_for_renames_in_diff $flist_menu_file]
set rename_from_filename [lindex $renamed_filenames 1]
set rename_to_filename [lindex $renamed_filenames 2]
if { ($rename_from_filename != {}) && ($rename_to_filename != {}) } {
set difffromfile [external_diff_get_one_file $diffidfrom $rename_from_filename $diffdir]
set difftofile [external_diff_get_one_file $diffidto $rename_to_filename $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