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
54 changes: 47 additions & 7 deletions gitk-git/gitk
Original file line number Diff line number Diff line change
Expand Up @@ -3662,11 +3662,33 @@ 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_length 12
set rename_to_text_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_length chars" "$rename_from_text_index lineend"]
lappend renamed_filenames [$ctext get "$rename_to_text_index + $rename_to_text_length chars" "$rename_to_text_index lineend"]
}
}
return $renamed_filenames
}

proc external_diff {} {
global nullid nullid2
global flist_menu_file
global diffids
global extdifftool
global file_rename_detection

if {[llength $diffids] == 1} {
# no reference commit given
Expand All @@ -3692,8 +3714,21 @@ 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]
if {$file_rename_detection} {
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]
}
} 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 Expand Up @@ -11577,7 +11612,7 @@ proc create_prefs_page {w} {
proc prefspage_general {notebook} {
global NS maxwidth maxgraphpct showneartags showlocalchanges
global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
global hideremotes want_ttk have_ttk maxrefs web_browser
global hideremotes want_ttk have_ttk maxrefs web_browser file_rename_detection

set page [create_prefs_page $notebook.general]

Expand Down Expand Up @@ -11639,12 +11674,16 @@ proc prefspage_general {notebook} {
grid $page.lgen - -sticky w -pady 10
${NS}::checkbutton $page.want_ttk -variable want_ttk \
-text [mc "Use themed widgets"]
${NS}::checkbutton $page.file_rename_detection -variable file_rename_detection \
-text [mc "Use ext diff file rename detection"]
${NS}::label $page.file_rename_detection_note -text [mc "(EXPERIMENTAL\nTries to find the file path of a\nrenamed file in external diff)"]
if {$have_ttk} {
${NS}::label $page.ttk_note -text [mc "(change requires restart)"]
} else {
${NS}::label $page.ttk_note -text [mc "(currently unavailable)"]
}
grid x $page.want_ttk $page.ttk_note -sticky w
grid x $page.file_rename_detection $page.file_rename_detection_note -sticky w
return $page
}

Expand Down Expand Up @@ -11725,7 +11764,7 @@ proc doprefs {} {
global oldprefs prefstop showneartags showlocalchanges
global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
global hideremotes want_ttk have_ttk
global hideremotes want_ttk have_ttk file_rename_detection

set top .gitkprefs
set prefstop $top
Expand All @@ -11734,7 +11773,7 @@ proc doprefs {} {
return
}
foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
limitdiffs tabstop perfile_attrs hideremotes want_ttk file_rename_detection} {
set oldprefs($v) [set $v]
}
ttk_toplevel $top
Expand Down Expand Up @@ -11860,7 +11899,7 @@ proc prefscan {} {
global oldprefs prefstop

foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
limitdiffs tabstop perfile_attrs hideremotes want_ttk} {
limitdiffs tabstop perfile_attrs hideremotes want_ttk file_rename_detection} {
global $v
set $v $oldprefs($v)
}
Expand Down Expand Up @@ -12404,6 +12443,7 @@ set autoselect 1
set autosellen 40
set perfile_attrs 0
set want_ttk 1
set file_rename_detection 0

if {[tk windowingsystem] eq "aqua"} {
set extdifftool "opendiff"
Expand Down Expand Up @@ -12498,7 +12538,7 @@ config_check_tmp_exists 50
set config_variables {
mainfont textfont uifont tabstop findmergefiles maxgraphpct maxwidth
cmitmode wrapcomment autoselect autosellen showneartags maxrefs visiblerefs
hideremotes showlocalchanges datetimeformat limitdiffs uicolor want_ttk
hideremotes showlocalchanges datetimeformat limitdiffs uicolor want_ttk file_rename_detection
bgcolor fgcolor uifgcolor uifgdisabledcolor colors diffcolors mergecolors
markbgcolor diffcontext selectbgcolor foundbgcolor currentsearchhitbgcolor
extdifftool perfile_attrs headbgcolor headfgcolor headoutlinecolor
Expand Down
Loading