@@ -3806,6 +3806,39 @@ 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 rename_from_text_index [$ctext search -elide -regexp -- $reg_expr_rename_from 0.0]
+ if { ($rename_from_text_index != {})} {
+ set reg_expr_rename_to {^rename to (.*)}
+ 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
+ }
+ set reg_expr_rename_to {^rename to (.*$filename)}
+ set reg_expr_rename_to [subst -nobackslashes -nocommands $reg_expr_rename_to]
+ set rename_to_text_index [$ctext search -elide -regexp -- $reg_expr_rename_to 0.0]
+ if { ($rename_to_text_index != {})} {
+ set reg_expr_rename_from {^rename from (.*)}
+ set rename_from_text_index [$ctext search -backwards -elide -regexp -- $reg_expr_rename_from $rename_to_text_index]
+ if { ($rename_to_text_index != {}) && ($rename_from_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
@@ -3836,8 +3869,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]