{"thread":{"id":"9817","subject":"[PATCH] Button added to performs a GUI diff","startedAt":"2007-09-07T15:07:19Z","lastAt":"2007-09-07T15:07:19Z","messageCount":1,"participants":["Pierre Marc Dumuid"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"52913","messageId":"46E16927.4070009@adelaide.edu.au","threadId":"9817","inReplyTo":null,"subject":"[PATCH] Button added to performs a GUI diff","fromName":"Pierre Marc Dumuid","fromEmail":"pierre.dumuid@adelaide.edu.au","sentAt":"2007-09-07T15:07:19Z","receivedAt":"2007-09-07T15:07:19Z","isPatch":true,"sender":{"key":"pierre.dumuid@adelaide.edu.au","avatar":null},"body":"Here is an updated version of the previous patch to handle the various \nGUI merging tools.\n\nPierre\n\n\n>From bd43cca7aa88282455b6bbe6e2f9d8134da1029c Mon Sep 17 00:00:00 2001\nFrom: Pierre Marc Dumuid <pierre.dumuid@adelaide.edu.au>\nDate: Sat, 8 Sep 2007 00:32:10 +0930\nSubject: [PATCH] Button added to performs a GUI diff\n\nSigned-off-by: Pierre Marc Dumuid <pierre.dumuid@adelaide.edu.au>\n---\n gitk |   46 +++++++++++++++++++++++++++++++++++++++++++++-\n 1 files changed, 45 insertions(+), 1 deletions(-)\n\ndiff --git a/gitk b/gitk\nindex 300fdce..b8b0b2e 100755\n--- a/gitk\n+++ b/gitk\n@@ -737,7 +737,9 @@ proc makewindow {} {\n \t-command changediffdisp -variable diffelide -value {1 0}\n     label .bleft.mid.labeldiffcontext -text \"      Lines of context: \" \\\n \t-font $uifont\n-    pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left\n+    button .bleft.top.guidiff -text \"GUI diff\" -command doguidiff \\\n+\t-font $uifont\n+    pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new .bleft.top.guidiff -side left\n     spinbox .bleft.mid.diffcontext -width 5 -font $textfont \\\n \t-from 1 -increment 1 -to 10000000 \\\n \t-validate all -validatecommand \"diffcontextvalidate %P\" \\\n@@ -5332,6 +5334,48 @@ proc incrsearch {name ix op} {\n     }\n }\n \n+proc doguidiff {} {\n+    global cflist sha1string\n+\n+    set taglist [$cflist tag ranges highlight]\n+    set from [lindex $taglist 0]\n+    set to [lindex $taglist 1]\n+\n+    set fname [$cflist get $from $to]\n+\n+    if {[catch {set merge_tool [exec git-config merge.tool]} err]} {\n+\terror_popup \"Sorry, 'merge.tool' not defined in git-config\"\n+\treturn\n+    }\n+\n+    if {[catch {exec git cat-file -p $sha1string^:$fname > .gitk_diffolder} err] \n+\t|| [catch {exec git cat-file -p $sha1string:$fname > .gitk_diffnewer} err]} {\n+\terror_popup \"Invalid file selected for comparison\"\n+\treturn\n+    }\n+\n+    switch -regexp $merge_tool {\n+\t\"kdiff3\" {\n+\t    exec kdiff3 --L1 \"$fname (Older)\" --L2 \"$fname (Newer)\" .gitk_diffolder .gitk_diffnewer  &\n+\t}\n+\t\"meld|opendiff|vimdiff|xxdiff\" {\n+\t    exec $merge_tool .gitk_diffolder .gitk_diffnewer &\n+\t}\n+\t\"tkdiff\" {\n+\t    exec $merge_tool -L \"$fname (Older)\" -L \"$fname (Newer)\" .gitk_diffolder .gitk_diffnewer &\n+\t}\n+\t\"vimdiff\" {\n+\t    exec $merge_tool .gitk_diffolder .gitk_diffnewer \n+\t}\n+\t\"emerge\" {\n+\t    exec emacs -f emerge-files-command .gitk_diffolder .gitk_diffnewer &\n+\t}\n+\tdefault {\n+\t    show_error {} \"No merge.tool defined.\"\n+\t}\n+    }\n+} \n+\n proc dosearch {} {\n     global sstring ctext searchstring searchdirn\n \n-- \n1.5.2.4\n\n"}]}