Browse Source

Hook ignore support into status.

Jelmer Vernooij 7 years ago
parent
commit
3c67d9cb2f
3 changed files with 21 additions and 3 deletions
  1. 2 2
      NEWS
  2. 6 1
      dulwich/porcelain.py
  3. 13 0
      dulwich/tests/test_porcelain.py

+ 2 - 2
NEWS

@@ -17,8 +17,8 @@
  IMPROVEMENTS
 
   * Add basic support for reading ignore files in ``dulwich.ignore``.
-    ``dulwich.porcelain.add`` now honors ignores.
-    (Jelmer Vernooij, #524)
+    ``dulwich.porcelain.add`` and ``dulwich.porcelain.status`` now honor
+   ignores. (Jelmer Vernooij, #524)
 
  * New ``dulwich.porcelain.check_ignore`` command.
    (Jelmer Vernooij)

+ 6 - 1
dulwich/porcelain.py

@@ -755,13 +755,18 @@ def status(repo="."):
         unstaged -  list of unstaged paths (diff index/working-tree)
         untracked - list of untracked, un-ignored & non-.git paths
     """
+    # TODO(jelmer): support --ignored
     with open_repo_closing(repo) as r:
         # 1. Get status of staged
         tracked_changes = get_tree_changes(r)
         # 2. Get status of unstaged
         index = r.open_index()
         unstaged_changes = list(get_unstaged_changes(index, r.path))
-        untracked_changes = list(get_untracked_paths(r.path, r.path, index))
+        ignore_manager = IgnoreFilterManager.from_repo(r)
+        untracked_changes = [
+                p for p in
+                get_untracked_paths(r.path, r.path, index)
+                if not ignore_manager.is_ignored(p)]
         return GitStatus(tracked_changes, unstaged_changes, untracked_changes)
 
 

+ 13 - 0
dulwich/tests/test_porcelain.py

@@ -788,6 +788,19 @@ class StatusTests(PorcelainTestCase):
         self.assertEqual(len(changes['modify']), 0)
         self.assertEqual(len(changes['delete']), 1)
 
+    def test_get_untracked_paths(self):
+        with open(os.path.join(self.repo.path, '.gitignore'), 'w') as f:
+            f.write('ignored\n')
+        with open(os.path.join(self.repo.path, 'ignored'), 'w') as f:
+            f.write('blah\n')
+        with open(os.path.join(self.repo.path, 'notignored'), 'w') as f:
+            f.write('blah\n')
+        self.assertEqual(
+            set(['ignored', 'notignored', '.gitignore']),
+            set(porcelain.get_untracked_paths(self.repo.path, self.repo.path,
+                                              self.repo.open_index())))
+        self.assertEqual(set(['.gitignore', 'notignored']),
+                         set(porcelain.status(self.repo).untracked))
 
 # TODO(jelmer): Add test for dulwich.porcelain.daemon