diff options
author | Jens Lehmann <Jens.Lehmann@web.de> | 2010-01-23 23:04:12 +0100 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2010-01-23 15:14:15 -0800 |
commit | a9ae14a1c50a9b5bd051be629dba0fb04b6fd67a (patch) | |
tree | 9ed8ecea84c910def99d4e3839c6366b3b74ffc6 | |
parent | 87cd09f43e56de5235d09aef3ff5d840419fef49 (diff) | |
download | git-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.tcl | 17 |
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 { |