• Show log

    Commit

  • Hash : b8922fc8
    Author : Patrick Steinhardt
    Date : 2017-07-07T13:27:27

    ignore: keep negative rules containing wildcards
    
    Ignore rules allow for reverting a previously ignored rule by prefixing
    it with an exclamation mark. As such, a negative rule can only override
    previously ignored files. While computing all ignore patterns, we try to
    use this fact to optimize away some negative rules which do not override
    any previous patterns, as they won't change the outcome anyway.
    
    In some cases, though, this optimization causes us to get the actual
    ignores wrong for some files. This may happen whenever the pattern
    contains a wildcard, as we are unable to reason about whether a pattern
    overrides a previous pattern in a sane way. This happens for example in
    the case where a gitignore file contains "*.c" and "!src/*.c", where we
    wouldn't un-ignore files inside of the "src/" subdirectory.
    
    In this case, the first solution coming to mind may be to just strip the
    "src/" prefix and simply compare the basenames. While that would work
    here, it would stop working as soon as the basename pattern itself is
    different, like for example with "*x.c" and "!src/*.c. As such, we
    settle for the easier fix of just not optimizing away rules that contain
    a wildcard.