• K
    dir.c: git-status: avoid is_excluded checks for tracked files · 8aaf8d77
    Karsten Blees 提交于
    Checking if a file is in the index is much faster (hashtable lookup) than
    checking if the file is excluded (linear search over exclude patterns).
    
    Skip is_excluded checks for files: move the cache_name_exists check from
    treat_file to treat_one_path and return early if the file is tracked.
    
    This can safely be done as all other code paths also return path_ignored
    for tracked files, and dir_add_ignored skips tracked files as well.
    
    There's just one line left in treat_file, so move this to treat_one_path
    as well.
    
    Here's some performance data for git-status from the linux and WebKit
    repos (best of 10 runs on a Debian Linux on SSD, core.preloadIndex=true):
    
           |    status      | status --ignored
           | linux | WebKit | linux | WebKit
    -------+-------+--------+-------+---------
    before | 0.218 |  1.583 | 0.321 |  2.579
    after  | 0.156 |  0.988 | 0.202 |  1.279
    gain   | 1.397 |  1.602 | 1.589 |  2.016
    Signed-off-by: NKarsten Blees <blees@dcon.de>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    8aaf8d77
dir.c 39.7 KB