ソースを参照

Change test to use custom repo

milki 13 年 前
コミット
0fef499869
1 ファイル変更42 行追加32 行削除
  1. 42 32
      dulwich/tests/test_index.py

+ 42 - 32
dulwich/tests/test_index.py

@@ -43,14 +43,10 @@ from dulwich.object_store import (
     )
 from dulwich.objects import (
     Blob,
+    Tree,
     )
 from dulwich.tests import TestCase
 from dulwich.repo import Repo
-from dulwich.tests.utils import (
-    open_repo,
-    tear_down_repo,
-)
-
 
 
 class IndexTestCase(TestCase):
@@ -220,35 +216,48 @@ class IndexEntryFromStatTests(TestCase):
 class BuildIndexTests(TestCase):
 
     def test_nonempty(self):
-        repo = open_repo('a.git')
-
-        target_repo_dir = tempfile.mkdtemp()
-        target_repo = Repo.init(target_repo_dir)
-
-        repo.fetch(target_repo)
-
-        target_repo.refs.add_if_new(
-                'refs/heads/master',
-                repo.refs['refs/heads/master'])
-
-        self.assertFalse(os.path.exists(target_repo.index_path()))
-        build_index_from_tree(target_repo.path, target_repo.index_path(),
-                target_repo.object_store, target_repo['refs/heads/master'].tree)
-        self.assertTrue(os.path.exists(target_repo.index_path()))
+        repo_dir = tempfile.mkdtemp()
+        repo = Repo.init(repo_dir)
+        self.addCleanup(shutil.rmtree, repo_dir) 
+
+        # Populate repo
+        filea = Blob.from_string('file a')
+        fileb = Blob.from_string('file b')
+        filed = Blob.from_string('file d')
+        filee = Blob.from_string('d')
+
+        tree = Tree()
+        tree['a'] = (33188, filea.id)
+        tree['b'] = (33188, fileb.id)
+        tree['c/d'] = (33188, filed.id)
+        tree['c/e'] = (40960, filee.id) # symlink
+
+        repo.object_store.add_object(filea)
+        repo.object_store.add_object(fileb)
+        repo.object_store.add_object(filed)
+        repo.object_store.add_object(filee)
+        repo.object_store.add_object(tree)
+
+        build_index_from_tree(repo.path, repo.index_path(),
+                repo.object_store, tree.id)
  
-        index = target_repo.open_index()
-
-        for entry in repo.object_store.iter_tree_contents(repo['refs/heads/master'].tree):
-            full_path = os.path.join(target_repo.path, entry.path)
+        # Verify index entries
+        index = repo.open_index()
+        for entry in tree.iteritems():
+            full_path = os.path.join(repo.path, entry.path)
             self.assertTrue(os.path.exists(full_path))
 
-            st = os.stat(full_path)
-            f = open(full_path, 'rb')
+            st = os.lstat(full_path)
+
             blob = Blob()
-            try:
-                blob.data = f.read()
-            finally:
-                f.close()
+            if( stat.S_ISLNK(st.st_mode) ):
+                blob.data = os.readlink(full_path)
+            else:
+                f = open(full_path, 'rb')
+                try:
+                    blob.data = f.read()
+                finally:
+                    f.close()
 
             index_entry = index_entry_from_stat(st, blob.id, 0)
 
@@ -256,5 +265,6 @@ class BuildIndexTests(TestCase):
 
             self.assertEquals(index_entry_cmp, index[entry.path])
 
-        shutil.rmtree(target_repo.path)
-        tear_down_repo(repo)
+        # Verify files
+        self.assertEquals(['.git', 'a', 'b', 'c'], os.listdir(repo.path))
+        self.assertEquals(['d', 'e'], os.listdir(os.path.join(repo.path, 'c')))