Subject: Re: git-status and git-diff now very slow in project with a submodule

From: Jens Lehmann <[email-masked]>
Date: Fri, 21 May 2010 14:05:36 +0200

Am 21.05.2010 00:59, schrieb Junio C Hamano:
> At least we should be able to let the users say, with "git status -uno",
> "I don't care about untracked and unignored paths; I don't make such a
> mistake to forget adding new paths", and optimize the scanning of
> submodule directories taking advantage of that statement.  Is there a
> fundamental reason why things shouldn't work that way, or is it just a
> bug in the current code?

It works that way since 3bfc450. "git status" (and the diff family when
comparing against the work tree) forks a "git status" for each submodule
that is populated. If the status command in the superproject is started
with "-uno" the same option is used for the "git status" forked in the
populated submodules, so no checking for untracked files is done in that
case.

But that doesn't speed up that process much, as the tracked files inside
the submodules have to be checked for modifications anyway, no matter if
"-uno" is used or not. Getting rid of the fork of a new "git status" by
using an alternate odb is on my to do list. Apart from gaining some time
by avoiding the fork (which is a per-submodule-constant) we could terminate
early in case we find a modification (instead of continuing as the current
approach does). But only dirty submodules would profit from that, a clean
submodule won't be scanned much faster that way AFAICS.