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 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.