aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Lehmann <Jens.Lehmann@web.de>2010-01-23 23:04:12 +0100
committerShawn O. Pearce <spearce@spearce.org>2010-01-23 15:14:15 -0800
commita9ae14a1c50a9b5bd051be629dba0fb04b6fd67a (patch)
tree9ed8ecea84c910def99d4e3839c6366b3b74ffc6
parent87cd09f43e56de5235d09aef3ff5d840419fef49 (diff)
downloadgit-a9ae14a1c50a9b5bd051be629dba0fb04b6fd67a.tar.gz
git-a9ae14a1c50a9b5bd051be629dba0fb04b6fd67a.tar.xz
git-gui: Use git diff --submodule when available
Doing so is much faster and gives the same output. Here are some numbers: $ time git submodule summary real 0m0.219s user 0m0.050s sys 0m0.111s $ time git diff --submodule real 0m0.012s user 0m0.003s sys 0m0.009s Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--lib/diff.tcl17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/diff.tcl b/lib/diff.tcl
index 066755b86..cd5b74c72 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -281,6 +281,15 @@ proc start_show_diff {cont_info {add_opts {}}} {
}
}
+ if {[string match {160000 *} [lindex $s 2]]
+ || [string match {160000 *} [lindex $s 3]]} {
+ set is_submodule_diff 1
+
+ if {[git-version >= "1.6.6"]} {
+ lappend cmd --submodule
+ }
+ }
+
lappend cmd -p
lappend cmd --no-color
if {$repo_config(gui.diffcontext) >= 1} {
@@ -296,9 +305,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
lappend cmd $path
}
- if {[string match {160000 *} [lindex $s 2]]
- || [string match {160000 *} [lindex $s 3]]} {
- set is_submodule_diff 1
+ if {$is_submodule_diff && [git-version < "1.6.6"]} {
if {$w eq $ui_index} {
set cmd [list submodule summary --cached -- $path]
} else {
@@ -387,7 +394,9 @@ proc read_diff {fd cont_info} {
}
} elseif {$is_submodule_diff} {
if {$line == ""} continue
- if {[regexp {^\* } $line]} {
+ if {[regexp {^Submodule } $line]} {
+ set tags d_@
+ } elseif {[regexp {^\* } $line]} {
set line [string replace $line 0 1 {Submodule }]
set tags d_@
} else {