Forráskód Böngészése

Correctly handle include, exclude than include in .gitignore

For example, for a .gitignore file like:
test
!test
test

"test" should be ignored.
Segev Finer 7 éve
szülő
commit
08f4a39975
2 módosított fájl, 5 hozzáadás és 3 törlés
  1. 1 2
      dulwich/ignore.py
  2. 4 1
      dulwich/tests/test_ignore.py

+ 1 - 2
dulwich/ignore.py

@@ -144,8 +144,7 @@ class IgnoreFilter(object):
         for pattern in self._patterns:
             if pattern[0:1] == b'!':
                 if match_pattern(path, pattern[1:]):
-                    # Explicitly excluded.
-                    return False
+                    status = False
             else:
                 if pattern[0:1] == b'\\':
                     pattern = pattern[1:]

+ 4 - 1
dulwich/tests/test_ignore.py

@@ -134,6 +134,10 @@ class IgnoreFilterTests(unittest.TestCase):
         self.assertFalse(filter.is_ignored(b'c.c'))
         self.assertIs(None, filter.is_ignored(b'd.c'))
 
+    def test_include_exclude_include(self):
+        filter = IgnoreFilter([b'a.c', b'!a.c', b'a.c'])
+        self.assertTrue(filter.is_ignored(b'a.c'))
+
 
 class IgnoreFilterStackTests(unittest.TestCase):
 
@@ -146,4 +150,3 @@ class IgnoreFilterStackTests(unittest.TestCase):
         self.assertIs(True, stack.is_ignored(b'c.c'))
         self.assertIs(False, stack.is_ignored(b'd.c'))
         self.assertIs(None, stack.is_ignored(b'e.c'))
-