From: David Aguilar <davvid@gmail.com>
To: paulus@samba.org
Cc: peff@peff.net, sam@vilain.net, git@vger.kernel.org,
David Aguilar <davvid@gmail.com>
Subject: [PATCH] gitk: Use git-difftool for external diffs
Date: Sun, 15 Nov 2009 19:12:06 -0800 [thread overview]
Message-ID: <1258341126-2108-1-git-send-email-davvid@gmail.com> (raw)
This teaches gitk about git-difftool. A benefit of this change is
that gitk's external diff now works with read-only repositories.
Signed-off-by: David Aguilar <davvid@gmail.com>
---
The diffstat alone makes me happy.
gitk | 83 ++++--------------------------------------------------------------
1 files changed, 5 insertions(+), 78 deletions(-)
diff --git a/gitk b/gitk
index db5ec54..881ef95 100755
--- a/gitk
+++ b/gitk
@@ -2520,7 +2520,7 @@ proc savestuff {w} {
global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
global cmitmode wrapcomment datetimeformat limitdiffs
global colors uicolor bgcolor fgcolor diffcolors diffcontext selectbgcolor
- global autoselect extdifftool perfile_attrs markbgcolor
+ global autoselect perfile_attrs markbgcolor
global hideremotes
if {$stuffsaved} return
@@ -2554,7 +2554,6 @@ proc savestuff {w} {
puts $f [list set markbgcolor $markbgcolor]
puts $f [list set diffcontext $diffcontext]
puts $f [list set selectbgcolor $selectbgcolor]
- puts $f [list set extdifftool $extdifftool]
puts $f [list set perfile_attrs $perfile_attrs]
puts $f "set geometry(main) [wm geometry .]"
@@ -3204,31 +3203,10 @@ proc save_file_from_commit {filename output what} {
return $output
}
-proc external_diff_get_one_file {diffid filename diffdir} {
- global nullid nullid2 nullfile
- global gitdir
-
- if {$diffid == $nullid} {
- set difffile [file join [file dirname $gitdir] $filename]
- if {[file exists $difffile]} {
- return $difffile
- }
- return $nullfile
- }
- if {$diffid == $nullid2} {
- set difffile [file join $diffdir "\[index\] [file tail $filename]"]
- return [save_file_from_commit :$filename $difffile index]
- }
- set difffile [file join $diffdir "\[$diffid\] [file tail $filename]"]
- return [save_file_from_commit $diffid:$filename $difffile \
- "revision $diffid"]
-}
-
proc external_diff {} {
global nullid nullid2
global flist_menu_file
global diffids
- global extdifftool
if {[llength $diffids] == 1} {
# no reference commit given
@@ -3249,23 +3227,9 @@ proc external_diff {} {
set diffidto [lindex $diffids 1]
}
- # make sure that several diffs wont collide
- set diffdir [gitknewtmpdir]
- 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 {$difffromfile ne {} && $difftofile ne {}} {
- set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]
- if {[catch {set fl [open |$cmd r]} err]} {
- file delete -force $diffdir
- error_popup "$extdifftool: [mc "command failed:"] $err"
- } else {
- fconfigure $fl -blocking 0
- filerun $fl [list delete_at_eof $fl $diffdir]
- }
+ set cmd {git difftool --no-prompt $diffidfrom $diffidto -- $flist_menu_file}
+ if {[catch {eval exec $cmd &} err]} {
+ error_popup "[mc "git difftool: command failed:"] $err"
}
}
@@ -3557,19 +3521,6 @@ proc read_line_source {fd inst} {
return 0
}
-# delete $dir when we see eof on $f (presumably because the child has exited)
-proc delete_at_eof {f dir} {
- while {[gets $f line] >= 0} {}
- if {[eof $f]} {
- if {[catch {close $f} err]} {
- error_popup "[mc "External diff viewer failed:"] $err"
- }
- file delete -force $dir
- return 0
- }
- return 1
-}
-
# Functions for adding and removing shell-type quoting
proc shellquote {str} {
@@ -10446,7 +10397,7 @@ proc doprefs {} {
global maxwidth maxgraphpct
global oldprefs prefstop showneartags showlocalchanges
global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
- global tabstop limitdiffs autoselect extdifftool perfile_attrs
+ global tabstop limitdiffs autoselect perfile_attrs
global hideremotes
set top .gitkprefs
@@ -10498,15 +10449,6 @@ proc doprefs {} {
-font optionfont -variable perfile_attrs
grid x $top.lattr -sticky w
- entry $top.extdifft -textvariable extdifftool
- frame $top.extdifff
- label $top.extdifff.l -text [mc "External diff tool" ] -font optionfont \
- -padx 10
- button $top.extdifff.b -text [mc "Choose..."] -font optionfont \
- -command choose_extdiff
- pack $top.extdifff.l $top.extdifff.b -side left
- grid x $top.extdifff $top.extdifft -sticky w
-
label $top.cdisp -text [mc "Colors: press to choose"]
grid $top.cdisp - -sticky w -pady 10
label $top.ui -padx 40 -relief sunk -background $uicolor
@@ -10566,15 +10508,6 @@ proc doprefs {} {
bind $top <Visibility> "focus $top.buts.ok"
}
-proc choose_extdiff {} {
- global extdifftool
-
- set prog [tk_getOpenFile -title [mc "External diff tool"] -multiple false]
- if {$prog ne {}} {
- set extdifftool $prog
- }
-}
-
proc choosecolor {v vi w x cmd} {
global $v
@@ -11100,12 +11033,6 @@ set datetimeformat "%Y-%m-%d %H:%M:%S"
set autoselect 1
set perfile_attrs 0
-if {[tk windowingsystem] eq "aqua"} {
- set extdifftool "opendiff"
-} else {
- set extdifftool "meld"
-}
-
set colors {green red blue magenta darkgrey brown orange}
set uicolor grey85
set bgcolor white
--
1.6.5.2.180.gc5b3e
next reply other threads:[~2009-11-16 3:12 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-16 3:12 David Aguilar [this message]
2009-11-19 9:03 ` [PATCH] gitk: Use git-difftool for external diffs Paul Mackerras
2009-11-19 19:39 ` David Aguilar
2009-11-19 22:21 ` Paul Mackerras
2009-11-20 7:53 ` Junio C Hamano
2009-11-20 18:55 ` David Aguilar
2009-11-20 20:51 ` Junio C Hamano
2009-11-21 21:47 ` David Aguilar
2009-11-20 23:33 ` Markus Heidelberg
2009-12-30 3:13 ` Nanako Shiraishi
2009-12-30 7:49 ` Junio C Hamano
2009-12-31 7:16 ` David Aguilar
2009-12-31 20:37 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2010-03-27 21:45 David Aguilar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1258341126-2108-1-git-send-email-davvid@gmail.com \
--to=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=paulus@samba.org \
--cc=peff@peff.net \
--cc=sam@vilain.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).