From: David Aguilar <davvid@gmail.com>
To: Paul Mackerras <paulus@samba.org>
Cc: Markus Heidelberg <markus.heidelberg@web.de>,
Junio C Hamano <gitster@pobox.com>,
Nanako Shiraishi <nanako3@lavabit.com>,
git@vger.kernel.org
Subject: [PATCH] gitk: Use git-difftool for external diffs
Date: Sat, 27 Mar 2010 14:45:16 -0700 [thread overview]
Message-ID: <1269726316-30443-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 feature now works with read-only
repositories.
Signed-off-by: David Aguilar <davvid@gmail.com>
---
This is still not the final result but it does get us
to a better place (having gitk work in read-only repos).
We may later want to add a radio button with "difftool"
as a choice so that the configured difftool is used
instead of the one specified being specified in --extcmd.
Original thread:
http://thread.gmane.org/gmane.comp.version-control.git/132983
An even older attempt to fix the tempdir problem:
http://thread.gmane.org/gmane.comp.version-control.git/133277
This diffstat alone still makes me happy.
gitk | 59 ++++++++++-------------------------------------------------
1 files changed, 10 insertions(+), 49 deletions(-)
diff --git a/gitk b/gitk
index 1f36a3e..7e114da 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,23 +3342,17 @@ 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]
+ if {$flist_menu_file ne {}} {
+ set cmd [list "git" "difftool" "--no-prompt" "--gui"]
+ lappend cmd "--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 &
}
}
--
1.7.0.3.291.g5e4f6
next reply other threads:[~2010-03-27 21:45 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-27 21:45 David Aguilar [this message]
2010-03-28 0:01 ` [PATCH v2] gitk: Use git-difftool for external diffs 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 ` [PATCH v4] " David Aguilar
2010-04-02 11:32 ` 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
-- strict thread matches above, loose matches on Subject: below --
2009-11-16 3:12 [PATCH] gitk: Use git-difftool for external diffs David Aguilar
2009-11-19 9:03 ` 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
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=1269726316-30443-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 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).