Browse Source

Ignore files in subrepositories.

Jelmer Vernooij 7 years ago
parent
commit
461fe060db
2 changed files with 23 additions and 0 deletions
  1. 6 0
      dulwich/porcelain.py
  2. 17 0
      dulwich/tests/test_porcelain.py

+ 6 - 0
dulwich/porcelain.py

@@ -782,6 +782,12 @@ def get_untracked_paths(frompath, basepath, index):
         # Skip .git and below.
         if '.git' in dirnames:
             dirnames.remove('.git')
+            if dirpath != frompath:
+                continue
+        if '.git' in filenames:
+            filenames.remove('.git')
+            if dirpath != frompath:
+                continue
         for filename in filenames:
             p = os.path.join(dirpath[len(basepath)+1:], filename)
             if p not in index:

+ 17 - 0
dulwich/tests/test_porcelain.py

@@ -802,6 +802,23 @@ class StatusTests(PorcelainTestCase):
         self.assertEqual(set(['.gitignore', 'notignored']),
                          set(porcelain.status(self.repo).untracked))
 
+    def test_get_untracked_paths_nested(self):
+        with open(os.path.join(self.repo.path, 'notignored'), 'w') as f:
+            f.write('blah\n')
+        subrepo = Repo.init(os.path.join(self.repo.path, 'nested'), mkdir=True)
+        with open(os.path.join(subrepo.path, 'another'), 'w') as f:
+            f.write('foo\n')
+
+        self.assertEqual(
+            set(['notignored']),
+            set(porcelain.get_untracked_paths(self.repo.path, self.repo.path,
+                                              self.repo.open_index())))
+        self.assertEqual(
+            set(['another']),
+            set(porcelain.get_untracked_paths(subrepo.path, subrepo.path,
+                                              subrepo.open_index())))
+
+
 # TODO(jelmer): Add test for dulwich.porcelain.daemon