Make sure ids get updated when the object changes.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 13 May 2010 09:26:38 +0000 (11:26 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 13 May 2010 09:26:38 +0000 (11:26 +0200)
dulwich/objects.py
dulwich/tests/test_objects.py

index e328016aa1788b296d101e3d5abfb91f98c0b21b..969e65341e315752f33ce01defdb15e774947d22 100644 (file)
@@ -434,7 +434,7 @@ class ShaFile(object):
 
     def sha(self):
         """The SHA1 object that is the name of this object."""
-        if self._sha is None:
+        if self._sha is None or self._needs_serialization:
             # this is a local because as_raw_chunks() overwrites self._sha
             new_sha = make_sha()
             new_sha.update(self._header())
index c3b4c69544c9014eb98dcfe0eeaf91c18f6e8ca2..3a00d4345f1358cd9ba37762c2fd8c762b70b2b4 100644 (file)
@@ -187,7 +187,8 @@ class BlobReadTests(unittest.TestCase):
         sha = '60dacdc733de308bb77bb76ce0fb0f9b44c9769e'
         c = self.commit(sha)
         self.assertEqual(c.tree, tree_sha)
-        self.assertEqual(c.parents, ['0d89f20333fbb1d2f3a94da77f4981373d8f4310'])
+        self.assertEqual(c.parents,
+            ['0d89f20333fbb1d2f3a94da77f4981373d8f4310'])
         self.assertEqual(c.author,
             'James Westby <jw+debian@jameswestby.net>')
         self.assertEqual(c.committer,
@@ -226,13 +227,6 @@ class BlobReadTests(unittest.TestCase):
         self.assertEqual(c.author_timezone, 0)
         self.assertEqual(c.message, 'Merge ../b\n')
 
-    def test_check_id(self):
-        wrong_sha = '1' * 40
-        b = self.get_blob(wrong_sha)
-        self.assertEqual(wrong_sha, b.id)
-        self.assertRaises(ChecksumMismatch, b.check)
-        self.assertEqual('742b386350576589175e374a5706505cbd17680c', b.id)
-
 
 class ShaFileCheckTests(unittest.TestCase):
 
@@ -419,6 +413,13 @@ class TreeTests(ShaFileCheckTests):
         self.assertEquals('100755 myname\0' + hex_to_sha(myhexsha),
                 x.as_raw_string())
 
+    def test_tree_update_id(self):
+        x = Tree()
+        x["a.c"] = (0100755, "d80c186a03f423a81b39df39dc87fd269736ca86")
+        self.assertEquals("0c5c6bc2c081accfbc250331b19e43b904ab9cdd", x.id)
+        x["a.b"] = (stat.S_IFDIR, "d80c186a03f423a81b39df39dc87fd269736ca86")
+        self.assertEquals("07bfcb5f3ada15bbebdfa3bbb8fd858a363925c8", x.id)
+
     def test_tree_dir_sort(self):
         x = Tree()
         x["a.c"] = (0100755, "d80c186a03f423a81b39df39dc87fd269736ca86")