Skip to content
  • Duy Nguyen's avatar
    pathspec: apply "*.c" optimization from exclude · 8c6abbcd
    Duy Nguyen authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    When a pattern contains only a single asterisk as wildcard,
    e.g. "foo*bar", after literally comparing the leading part "foo" with
    the string, we can compare the tail of the string and make sure it
    matches "bar", instead of running fnmatch() on "*bar" against the
    remainder of the string.
    
    -O2 build on linux-2.6, without the patch:
    
    $ time git rev-list --quiet HEAD -- '*.c'
    
    real    0m40.770s
    user    0m40.290s
    sys     0m0.256s
    
    With the patch
    
    $ time ~/w/git/git rev-list --quiet HEAD -- '*.c'
    
    real    0m34.288s
    user    0m33.997s
    sys     0m0.205s
    
    The above command is not supposed to be widely popular. It's chosen
    because it exercises pathspec matching a lot. The point is it cuts
    down matching time for popular patterns like *.c, which could be used
    as pathspec in other places.
    
    Signed-off-by: default avatarNguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    8c6abbcd