Skip to content
  • Junio C Hamano's avatar
    per-directory-exclude: lazily read .gitignore files · 63d285c8
    Junio C Hamano authored
    
    
    Operations that walk directories or trees, which potentially need to
    consult the .gitignore files, used to always try to open the .gitignore
    file every time they entered a new directory, even when they ended up
    not needing to call excluded() function to see if a path in the
    directory is ignored.  This was done by push/pop exclude_per_directory()
    functions that managed the data in a stack.
    
    This changes the directory walking API to remove the need to call these
    two functions.  Instead, the directory walk data structure caches the
    data used by excluded() function the last time, and lazily reuses it as
    much as possible.  Among the data the last check used, the ones from
    deeper directories that the path we are checking is outside are
    discarded, data from the common leading directories are reused, and then
    the directories between the common directory and the directory the path
    being checked is in are checked for .gitignore file.  This is very
    similar to the way gitattributes are handled.
    
    This API change also fixes "ls-files -c -i", which called excluded()
    without setting up the gitignore data via the old push/pop functions.
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    63d285c8