From a9ae14a1c50a9b5bd051be629dba0fb04b6fd67a Mon Sep 17 00:00:00 2001 From: Jens Lehmann Date: Sat, 23 Jan 2010 23:04:12 +0100 Subject: [PATCH] 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 Signed-off-by: Shawn O. Pearce --- lib/diff.tcl | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/diff.tcl b/lib/diff.tcl index 066755b864..cd5b74c728 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 { -- 2.11.4.GIT