From: David Aguilar <davvid@gmail.com>
To: Paul Mackerras <paulus@samba.org>
Cc: Nanako Shiraishi <nanako3@lavabit.com>,
Markus Heidelberg <markus.heidelberg@web.de>,
Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org
Subject: [PATCH v4] gitk: Use git-difftool for external diffs
Date: Tue, 30 Mar 2010 19:09:59 -0700 [thread overview]
Message-ID: <1270001399-26031-1-git-send-email-davvid@gmail.com> (raw)
In-Reply-To: <201003281259.06947.markus.heidelberg@web.de>
This teaches gitk about git-difftool. A benefit of this change
is that gitk's external diff feature now works with read-only
repositories.
Signed-off-by: David Aguilar <davvid@gmail.com>
---
gitk | 58 ++++++++--------------------------------------------------
1 files changed, 8 insertions(+), 50 deletions(-)
diff --git a/gitk b/gitk
index 1f36a3e..71cb501 100755
--- a/gitk
+++ b/gitk
@@ -3317,39 +3317,6 @@ proc gitknewtmpdir {} {
return $diffdir
}
-proc save_file_from_commit {filename output what} {
- global nullfile
-
- if {[catch {exec git show $filename -- > $output} err]} {
- if {[string match "fatal: bad revision *" $err]} {
- return $nullfile
- }
- error_popup "[mc "Error getting \"%s\" from %s:" $filename $what] $err"
- return {}
- }
- 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
@@ -3375,24 +3342,15 @@ 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 [list "git" "difftool" "--no-prompt" "--extcmd=$extdifftool"]
+ if {$diffidfrom ne $nullid && $diffidfrom ne $nullid2} {
+ lappend cmd $diffidfrom
+ }
+ if {$diffidto ne $nullid && $diffidto ne $nullid2} {
+ lappend cmd $diffidto
}
+ lappend cmd "--" $flist_menu_file
+ eval exec $cmd &
}
proc find_hunk_blamespec {base line} {
--
1.7.0.3.313.g87b3c
next prev parent reply other threads:[~2010-03-31 2:16 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-27 21:45 [PATCH] gitk: Use git-difftool for external diffs David Aguilar
2010-03-28 0:01 ` [PATCH v2] " David Aguilar
2010-03-28 0:20 ` [PATCH v3] " David Aguilar
2010-03-28 10:59 ` Markus Heidelberg
2010-03-31 2:06 ` David Aguilar
2010-03-31 2:09 ` David Aguilar [this message]
2010-04-02 11:32 ` [PATCH v4] " Markus Heidelberg
2010-04-08 9:02 ` David Aguilar
2010-04-08 9:08 ` [PATCH v5] gitk: Use git-difftool for external diffs when git >= 1.7.0 David Aguilar
2010-04-17 8:52 ` Paul Mackerras
2010-04-17 22:45 ` David Aguilar
2010-04-18 2:20 ` Jay Soffian
2010-04-20 8:11 ` [PATCH v6] gitk: Use git-difftool for external diffs when available David Aguilar
2010-06-08 8:10 ` 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=1270001399-26031-1-git-send-email-davvid@gmail.com \
--to=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=markus.heidelberg@web.de \
--cc=nanako3@lavabit.com \
--cc=paulus@samba.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.