bash prompt: faster untracked status indicator with untracked directories
commitdd160d794f0bf02c30d2e5032e216b1e8ac14222
authorSZEDER Gábor <szeder@ira.uka.de>
Sun, 19 Jul 2015 11:28:06 +0000 (19 13:28 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 20 Jul 2015 20:08:56 +0000 (20 13:08 -0700)
tree2ede96bd09f34917f52ef83a7185cd50a0b1b29f
parent6bfab998b5046e8f4f7b0ae4833ba4babf92de83
bash prompt: faster untracked status indicator with untracked directories

If the untracked status indicator is enabled, __git_ps1() looks for
untracked files by running 'git ls-files'.  This can be perceptibly slow
in case of an untracked directory containing lot of files, because it
lists all files found in the untracked directory only to be redirected
into /dev/null right away (this is the actual command run by __git_ps1()):

  $ ls untracked-dir/ |wc -l
  100000
  $ time git ls-files --others --exclude-standard --error-unmatch \
    -- ':/*' >/dev/null 2>/dev/null

  real 0m0.955s
  user 0m0.936s
  sys 0m0.016s

Eliminate this delay by additionally passing the '--directory
--no-empty-directory' options to 'git ls-files' to show only the name of
non-empty untracked directories instead of all their content:

  $ time git ls-files --others --exclude-standard --directory \
    --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null

  real 0m0.010s
  user 0m0.008s
  sys 0m0.000s

This follows suit of ea95c7b8f5 (completion: improve untracked directory
filtering for filename completion, 2013-09-18).

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-prompt.sh