Add tests for commit.
authorJelmer Vernooij <jelmer@samba.org>
Fri, 8 May 2009 20:50:45 +0000 (22:50 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 8 May 2009 20:50:45 +0000 (22:50 +0200)
dulwich/index.py
dulwich/object_store.py
dulwich/objects.py
dulwich/tests/test_index.py

index dce305d962d90de38be89fb06e82fb8e33f57c73..97fee73864546341c6b90440f8b5c52de061c032 100644 (file)
@@ -18,6 +18,7 @@
 
 """Parser for the git index file format."""
 
+import os
 import stat
 import struct
 
@@ -227,8 +228,9 @@ def commit_tree(object_store, blobs):
 
     for path in sorted(trees.keys(), reverse=True):
         tree = Tree()
-        for basename, (mode, sha) in trees[path]:
+        for basename, (mode, sha) in trees[path].iteritems():
             tree.add(mode, basename, sha)
+        object_store.add_object(tree)
         if path != "":
             # Add to object store
             parent_path, basename = os.path.split(path)
index 720a4eff91a06e153ffd2421b1b43c49990d9c56..8b9bfcdf6eb440523f86952b95ef1376daef98b8 100644 (file)
@@ -319,13 +319,16 @@ class MemoryObjectStore(BaseObjectStore):
         :param name: sha for the object.
         :return: tuple with object type and object contents.
         """
-        return self[sha].as_raw_string()
+        return self[name].as_raw_string()
+
+    def __getitem__(self, name):
+        return self._data[name]
 
     def add_object(self, obj):
         """Add a single object to this object store.
 
         """
-        self._dict[obj.id] = obj
+        self._data[obj.id] = obj
 
     def add_objects(self, objects):
         """Add a set of objects to this object store.
index 2b1c568a6534619778dad2e7784fe4dd2c9b393a..fc0fcd7357e91a7740ffb8a53d4777795ac900f2 100644 (file)
@@ -231,11 +231,15 @@ class Blob(ShaFile):
     _needs_serialization = False
     _needs_parsing = False
 
-    @property
-    def data(self):
-        """The text contained within the blob object."""
+    def get_data(self):
         return self._text
 
+    def set_data(self, data):
+        self._text = data
+
+    data = property(get_data, set_data, 
+            "The text contained within the blob object.")
+
     @classmethod
     def from_file(cls, filename):
         blob = ShaFile.from_file(filename)
@@ -420,6 +424,9 @@ class Tree(ShaFile):
         self._needs_serialization = True
 
     def add(self, mode, name, hexsha):
+        assert type(mode) == int
+        assert type(name) == str
+        assert type(hexsha) == str
         self._ensure_parsed()
         self._entries[name] = mode, hexsha
         self._needs_serialization = True
index 5b8aadc366727cbaacbb1ec9ddc5c86ee4375a16..726b5ed2146958098882c5e55edb5109f930f5dd 100644 (file)
 # MA  02110-1301, USA.
 
 import os
+import stat
 from unittest import TestCase
 
 from dulwich.index import (
     Index,
+    commit_tree,
     read_index,
     write_index,
     )
+from dulwich.object_store import (
+    MemoryObjectStore,
+    )
+from dulwich.objects import (
+    Blob,
+    )
 
 class IndexTestCase(TestCase):
 
@@ -62,3 +70,19 @@ class SimpleIndexWriterTestCase(IndexTestCase):
         finally:
             x.close()
 
+
+class CommitTreeTests(TestCase):
+
+    def setUp(self):
+        super(CommitTreeTests, self).setUp()
+        self.store = MemoryObjectStore()
+
+    def test_single_blob(self):
+        blob = Blob()
+        blob.data = "foo"
+        self.store.add_object(blob)
+        blobs = [("bla", blob.id, stat.S_IFREG)]
+        rootid = commit_tree(self.store, blobs)
+        self.assertEquals(rootid, "1a1e80437220f9312e855c37ac4398b68e5c1d50")
+        self.assertEquals(blob.id, self.store[rootid]["bla"][1])
+        self.assertEquals(set([rootid, blob.id]), set(self.store._data.keys()))