def test_serializable(self):
        # tree at the given commit contains a submodule as well
        roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c')
        for item in roottree.traverse(ignore_self=False):
            if item.type != Tree.type:
                continue
            # END skip non-trees
            tree = item
            # trees have no dict
            self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1)

            orig_data = tree.data_stream.read()
            orig_cache = tree._cache

            stream = BytesIO()
            tree._serialize(stream)
            assert stream.getvalue() == orig_data

            stream.seek(0)
            testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '')
            testtree._deserialize(stream)
            assert testtree._cache == orig_cache

            # replaces cache, but we make sure of it
            del(testtree._cache)
            testtree._deserialize(stream)
Esempio n. 2
0
    def test_serializable(self):
        # tree at the given commit contains a submodule as well
        roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c')
        for item in roottree.traverse(ignore_self=False):
            if item.type != Tree.type:
                continue
            # END skip non-trees
            tree = item
            # trees have no dict
            self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1)

            orig_data = tree.data_stream.read()
            orig_cache = tree._cache

            stream = BytesIO()
            tree._serialize(stream)
            assert stream.getvalue() == orig_data

            stream.seek(0)
            testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '')
            testtree._deserialize(stream)
            assert testtree._cache == orig_cache

            # replaces cache, but we make sure of it
            del (testtree._cache)
            testtree._deserialize(stream)
Esempio n. 3
0
    def test_serializable(self):
        # tree at the given commit contains a submodule as well
        roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c')
        for item in roottree.traverse(ignore_self=False):
            if item.type != Tree.type:
                continue
            # END skip non-trees
            tree = item
            # trees have no dict
            self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1)

            orig_data = tree.data_stream.read()
            orig_cache = tree._cache

            stream = BytesIO()
            tree._serialize(stream)
            assert stream.getvalue() == orig_data

            stream.seek(0)
            testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '')
            testtree._deserialize(stream)
            assert testtree._cache == orig_cache

            # TEST CACHE MUTATOR
            mod = testtree.cache
            self.failUnlessRaises(ValueError, mod.add, "invalid sha", 0, "name")
            self.failUnlessRaises(ValueError, mod.add, Tree.NULL_HEX_SHA, 0, "invalid mode")
            self.failUnlessRaises(ValueError, mod.add, Tree.NULL_HEX_SHA, tree.mode, "invalid/name")

            # add new item
            name = "fake_dir"
            mod.add(testtree.NULL_HEX_SHA, tree.mode, name)
            assert name in testtree

            # its available in the tree immediately
            assert isinstance(testtree[name], Tree)

            # adding it again will not cause multiple of them to be presents
            cur_count = len(testtree)
            mod.add(testtree.NULL_HEX_SHA, tree.mode, name)
            assert len(testtree) == cur_count

            # fails with a different sha - name exists
            hexsha = "1" * 40
            self.failUnlessRaises(ValueError, mod.add, hexsha, tree.mode, name)

            # force it - replace existing one
            mod.add(hexsha, tree.mode, name, force=True)
            assert testtree[name].hexsha == hexsha
            assert len(testtree) == cur_count

            # unchecked addition always works, even with invalid items
            invalid_name = "hi/there"
            mod.add_unchecked(hexsha, 0, invalid_name)
            assert len(testtree) == cur_count + 1

            del(mod[invalid_name])
            assert len(testtree) == cur_count
            # del again, its fine
            del(mod[invalid_name])

            # have added one item, we are done
            mod.set_done()
            mod.set_done()      # multiple times are okay

            # serialize, its different now
            stream = BytesIO()
            testtree._serialize(stream)
            stream.seek(0)
            assert stream.getvalue() != orig_data

            # replaces cache, but we make sure of it
            del(testtree._cache)
            testtree._deserialize(stream)
            assert name in testtree
            assert invalid_name not in testtree