Re: [PATCH] completion: improve untracked directory filtering for filename completion

2013-09-19 Thread Jonathan Nieder
SZEDER Gábor wrote:

   $ time __git_index_files --others --modified
   untracked-dir

   real0m0.537s
   user0m0.452s
   sys 0m0.160s

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

   $ time __git_index_files --others --modified --directory 
 --no-empty-directory
   untracked-dir

   real0m0.029s
   user0m0.020s
   sys 0m0.004s

Nice.  This is what git status uses, too.

 Filename completion for 'git clean' suffers from the same delay, as it
 offers untracked files, too.  The fix could be the same, but since it
 actually makes sense to 'git clean' empty directories, in this case we
 only pass the '--directory' option to 'git ls-files'.

Also sensible.

For what it's worth,
Reviewed-by: Jonathan Nieder jrnie...@gmail.com
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] completion: improve untracked directory filtering for filename completion

2013-09-18 Thread SZEDER Gábor
Similar to Bash's default filename completion, our git-aware filename
completion stops at directory boundaries, i.e. it doesn't offer the
full 'path/to/file' at first, but only 'path/'.  To achieve that the
completion script runs 'git ls-files' with specific command line
options to get the list of relevant paths under the current directory,
and then processes each path to strip all but the base directory or
filename (see __git_index_files()).

To offer only modified and untracked files for 'git add' the
completion script runs 'git ls-files --exclude-standard --others
--modified'.  This command lists all non-ignored files in untracked
directories, which leads to a noticeable delay caused by the
processing mentioned above if there are a lot of such files
(__git_index_files() specifies '--exclude-standard' internally):

  $ mkdir untracked-dir
  $ for i in {1..1} ; do untracked-dir/$i ; done
  $ time __git_index_files --others --modified
  untracked-dir

  real  0m0.537s
  user  0m0.452s
  sys   0m0.160s

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

  $ time __git_index_files --others --modified --directory 
--no-empty-directory
  untracked-dir

  real  0m0.029s
  user  0m0.020s
  sys   0m0.004s

Filename completion for 'git clean' suffers from the same delay, as it
offers untracked files, too.  The fix could be the same, but since it
actually makes sense to 'git clean' empty directories, in this case we
only pass the '--directory' option to 'git ls-files'.

Reported-by: Isaac Levy il...@google.com
Signed-off-by: SZEDER Gábor sze...@ira.uka.de
---
 contrib/completion/git-completion.bash | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index e1b7313072..86f77345fd 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -901,7 +901,7 @@ _git_add ()
esac
 
# XXX should we check for --update and --all options ?
-   __git_complete_index_file --others --modified
+   __git_complete_index_file --others --modified --directory 
--no-empty-directory
 }
 
 _git_archive ()
@@ -1063,7 +1063,7 @@ _git_clean ()
esac
 
# XXX should we check for -x option ?
-   __git_complete_index_file --others
+   __git_complete_index_file --others --directory
 }
 
 _git_clone ()
-- 
1.8.4.366.g16e4e67

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html