From b377c07200392ac35a6ed668673451d3c9b1f5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steve=20Fr=C3=A9cinaux?= Date: Fri, 5 Sep 2008 21:51:14 +0200 Subject: Use a dictionnary for tree contents It seems more natural to use a dictionnary for directories, since we usually want to access them by name, and entry order is not relevant. Also, finding a particular blob given its name is O(1) instead of O(N). --- test/git/test_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/git/test_tree.py') diff --git a/test/git/test_tree.py b/test/git/test_tree.py index 957b8962..d66764b3 100644 --- a/test/git/test_tree.py +++ b/test/git/test_tree.py @@ -18,7 +18,7 @@ class TestTree(object): tree = self.repo.tree('master') - child = tree.contents[-1] + child = tree.contents['grit'] child.contents child.contents -- cgit v1.2.3 From 0425bc64384fe9a6a22edb7831d6e8c1756e2c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steve=20Fr=C3=A9cinaux?= Date: Sat, 6 Sep 2008 00:10:12 +0200 Subject: Implement dict protocol for trees. It is rather intuitive to consider trees as a dict of objects (like a directory could be seen as a dict of files). --- test/git/test_tree.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'test/git/test_tree.py') diff --git a/test/git/test_tree.py b/test/git/test_tree.py index d66764b3..6b62c958 100644 --- a/test/git/test_tree.py +++ b/test/git/test_tree.py @@ -18,9 +18,9 @@ class TestTree(object): tree = self.repo.tree('master') - child = tree.contents['grit'] - child.contents - child.contents + child = tree['grit'] + child.items() + child.items() assert_true(git.called) assert_equal(2, git.call_count) @@ -96,6 +96,55 @@ class TestTree(object): assert_true(git.called) assert_equal(git.call_args, (('ls_tree', 'master'), {})) + @patch(Blob, 'size') + @patch(Git, '_call_process') + def test_dict(self, blob, git): + git.return_value = fixture('ls_tree_a') + blob.return_value = 1 + + tree = self.repo.tree('master') + + assert_equal('aa06ba24b4e3f463b3c4a85469d0fb9e5b421cf8', tree['lib'].id) + assert_equal('8b1e02c0fb554eed2ce2ef737a68bb369d7527df', tree['README.txt'].id) + + assert_true(git.called) + assert_equal(git.call_args, (('ls_tree', 'master'), {})) + + @patch(Blob, 'size') + @patch(Git, '_call_process') + def test_dict_with_zero_length_file(self, blob, git): + git.return_value = fixture('ls_tree_a') + blob.return_value = 0 + + tree = self.repo.tree('master') + + assert_not_none(tree['README.txt']) + assert_equal('8b1e02c0fb554eed2ce2ef737a68bb369d7527df', tree['README.txt'].id) + + assert_true(git.called) + assert_equal(git.call_args, (('ls_tree', 'master'), {})) + + @patch(Git, '_call_process') + def test_dict_with_commits(self, git): + git.return_value = fixture('ls_tree_commit') + + tree = self.repo.tree('master') + + assert_none(tree.get('bar')) + assert_equal('2afb47bcedf21663580d5e6d2f406f08f3f65f19', tree['foo'].id) + assert_equal('f623ee576a09ca491c4a27e48c0dfe04be5f4a2e', tree['baz'].id) + + assert_true(git.called) + assert_equal(git.call_args, (('ls_tree', 'master'), {})) + + @patch(Git, '_call_process') + @raises(KeyError) + def test_dict_with_non_existant_file(self, git): + git.return_value = fixture('ls_tree_commit') + + tree = self.repo.tree('master') + tree['bar'] + def test_repr(self): self.tree = Tree(self.repo, **{'id': 'abc'}) assert_equal('', repr(self.tree)) -- cgit v1.2.3 From 2f6a6e35d003c243968cdb41b72fbbe609e56841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steve=20Fr=C3=A9cinaux?= Date: Sat, 6 Sep 2008 00:34:18 +0200 Subject: Make Tree.content_from_string a static method. It doesn't use an object's private contents, so let's go... --- test/git/test_tree.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'test/git/test_tree.py') diff --git a/test/git/test_tree.py b/test/git/test_tree.py index 6b62c958..34aa4d61 100644 --- a/test/git/test_tree.py +++ b/test/git/test_tree.py @@ -10,7 +10,6 @@ from git import * class TestTree(object): def setup(self): self.repo = Repo(GIT_REPO) - self.tree = Tree(self.repo) @patch(Git, '_call_process') def test_contents_should_cache(self, git): @@ -28,7 +27,7 @@ class TestTree(object): def test_content_from_string_tree_should_return_tree(self): text = fixture('ls_tree_a').splitlines()[-1] - tree = self.tree.content_from_string(None, text) + tree = Tree.content_from_string(None, text) assert_equal(Tree, tree.__class__) assert_equal("650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44", tree.id) @@ -38,7 +37,7 @@ class TestTree(object): def test_content_from_string_tree_should_return_blob(self): text = fixture('ls_tree_b').split("\n")[0] - tree = self.tree.content_from_string(None, text) + tree = Tree.content_from_string(None, text) assert_equal(Blob, tree.__class__) assert_equal("aa94e396335d2957ca92606f909e53e7beaf3fbb", tree.id) @@ -48,12 +47,12 @@ class TestTree(object): def test_content_from_string_tree_should_return_commit(self): text = fixture('ls_tree_commit').split("\n")[1] - tree = self.tree.content_from_string(None, text) + tree = Tree.content_from_string(None, text) assert_none(tree) @raises(TypeError) def test_content_from_string_invalid_type_should_raise(self): - self.tree.content_from_string(None, "040000 bogus 650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44 test") + Tree.content_from_string(None, "040000 bogus 650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44 test") @patch(Blob, 'size') @patch(Git, '_call_process') @@ -146,5 +145,5 @@ class TestTree(object): tree['bar'] def test_repr(self): - self.tree = Tree(self.repo, **{'id': 'abc'}) - assert_equal('', repr(self.tree)) + tree = Tree(self.repo, id='abc') + assert_equal('', repr(tree)) -- cgit v1.2.3