>From bd43cca7aa88282455b6bbe6e2f9d8134da1029c Mon Sep 17 00:00:00 2001 From: Pierre Marc Dumuid Date: Sat, 8 Sep 2007 00:32:10 +0930 Subject: [PATCH] Button added to performs a GUI diff Signed-off-by: Pierre Marc Dumuid --- gitk | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 45 insertions(+), 1 deletions(-) diff --git a/gitk b/gitk index 300fdce..b8b0b2e 100755 --- a/gitk +++ b/gitk @@ -737,7 +737,9 @@ proc makewindow {} { -command changediffdisp -variable diffelide -value {1 0} label .bleft.mid.labeldiffcontext -text " Lines of context: " \ -font $uifont - pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left + button .bleft.top.guidiff -text "GUI diff" -command doguidiff \ + -font $uifont + pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new .bleft.top.guidiff -side left spinbox .bleft.mid.diffcontext -width 5 -font $textfont \ -from 1 -increment 1 -to 10000000 \ -validate all -validatecommand "diffcontextvalidate %P" \ @@ -5332,6 +5334,48 @@ proc incrsearch {name ix op} { } } +proc doguidiff {} { + global cflist sha1string + + set taglist [$cflist tag ranges highlight] + set from [lindex $taglist 0] + set to [lindex $taglist 1] + + set fname [$cflist get $from $to] + + if {[catch {set merge_tool [exec git-config merge.tool]} err]} { + error_popup "Sorry, 'merge.tool' not defined in git-config" + return + } + + if {[catch {exec git cat-file -p $sha1string^:$fname > .gitk_diffolder} err] + || [catch {exec git cat-file -p $sha1string:$fname > .gitk_diffnewer} err]} { + error_popup "Invalid file selected for comparison" + return + } + + switch -regexp $merge_tool { + "kdiff3" { + exec kdiff3 --L1 "$fname (Older)" --L2 "$fname (Newer)" .gitk_diffolder .gitk_diffnewer & + } + "meld|opendiff|vimdiff|xxdiff" { + exec $merge_tool .gitk_diffolder .gitk_diffnewer & + } + "tkdiff" { + exec $merge_tool -L "$fname (Older)" -L "$fname (Newer)" .gitk_diffolder .gitk_diffnewer & + } + "vimdiff" { + exec $merge_tool .gitk_diffolder .gitk_diffnewer + } + "emerge" { + exec emacs -f emerge-files-command .gitk_diffolder .gitk_diffnewer & + } + default { + show_error {} "No merge.tool defined." + } + } +} + proc dosearch {} { global sstring ctext searchstring searchdirn -- 1.5.2.4