• Jeff King's avatar
    utf8: add is_hfs_dotgit() helper · 6162a1d3
    Jeff King authored
    We do not allow paths with a ".git" component to be added to
    the index, as that would mean repository contents could
    overwrite our repository files. However, asking "is this
    path the same as .git" is not as simple as strcmp() on some
    filesystems.
    
    HFS+'s case-folding does more than just fold uppercase into
    lowercase (which we already handle with strcasecmp). It may
    also skip past certain "ignored" Unicode code points, so
    that (for example) ".gi\u200ct" is mapped ot ".git".
    
    The full list of folds can be found in the tables at:
    
      https://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/hfs/hfscommon/Unicode/UCStringCompareData.h
    
    Implementing a full "is this path the same as that path"
    comparison would require us importing the whole set of
    tables.  However, what we want to do is much simpler: we
    only care about checking ".git". We know that 'G' is the
    only thing that folds to 'g', and so on, so we really only
    need to deal with the set of ignored code points, which is
    much smaller.
    Signed-off-by: default avatarJeff King <[email protected]>
    Signed-off-by: default avatarJunio C Hamano <[email protected]>
    6162a1d3
utf8.c 18.2 KB