1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# test_tree.py
# Copyright (C) 2008 Michael Trier (mtrier@gmail.com) and contributors
#
# This module is part of GitPython and is released under
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
from test.testlib import *
from git import *
class TestTree(object):
def setup(self):
self.repo = Repo(GIT_REPO)
self.tree = Tree(self.repo)
@patch(Git, 'method_missing')
def test_contents_should_cache(self, git):
git.return_value = fixture('ls_tree_a') + fixture('ls_tree_b')
tree = self.repo.tree('master')
child = tree.contents[-1]
child.contents
child.contents
assert_true(git.called)
assert_equal(2, git.call_count)
assert_equal(git.call_args, (('ls_tree', '34868e6e7384cb5ee51c543a8187fdff2675b5a7'), {}))
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)
assert_equal(Tree, tree.__class__)
assert_equal("650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44", tree.id)
assert_equal("040000", tree.mode)
assert_equal("test", tree.name)
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)
assert_equal(Blob, tree.__class__)
assert_equal("aa94e396335d2957ca92606f909e53e7beaf3fbb", tree.id)
assert_equal("100644", tree.mode)
assert_equal("grit.rb", tree.name)
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)
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")
@patch(Blob, 'size')
@patch(Git, 'method_missing')
def test_slash(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, 'method_missing')
def test_slash_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, 'method_missing')
def test_slash_with_commits(self, git):
git.return_value = fixture('ls_tree_commit')
tree = self.repo.tree('master')
assert_none(tree/'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'), {}))
def test_repr(self):
self.tree = Tree(self.repo, **{'id': 'abc'})
assert_equal('<GitPython.Tree "abc">', repr(self.tree))
|