50
51
class TestWorkingTree(TestCaseInTempDir):
52
53
def test_listfiles(self):
53
branch = Branch.initialize('.')
54
branch = Branch.initialize(u'.')
55
56
print >> open('file', 'w'), "content"
56
os.symlink('target', 'symlink')
58
os.symlink('target', 'symlink')
57
59
tree = branch.working_tree()
58
60
files = list(tree.list_files())
59
61
self.assertEqual(files[0], ('dir', '?', 'directory', None, TreeDirectory()))
60
62
self.assertEqual(files[1], ('file', '?', 'file', None, TreeFile()))
61
self.assertEqual(files[2], ('symlink', '?', 'symlink', None, TreeLink()))
64
self.assertEqual(files[2], ('symlink', '?', 'symlink', None, TreeLink()))
66
def test_open_containing(self):
67
branch = Branch.initialize(u'.')
68
wt, relpath = WorkingTree.open_containing()
69
self.assertEqual('', relpath)
70
self.assertEqual(wt.basedir + '/', branch.base)
71
wt, relpath = WorkingTree.open_containing(u'.')
72
self.assertEqual('', relpath)
73
self.assertEqual(wt.basedir + '/', branch.base)
74
wt, relpath = WorkingTree.open_containing('./foo')
75
self.assertEqual('foo', relpath)
76
self.assertEqual(wt.basedir + '/', branch.base)
77
# paths that are urls are just plain wrong for working trees.
78
self.assertRaises(NotBranchError,
79
WorkingTree.open_containing,
80
'file:///' + getcwd())
63
82
def test_construct_with_branch(self):
64
branch = Branch.initialize('.')
83
branch = Branch.initialize(u'.')
65
84
tree = WorkingTree(branch.base, branch)
66
85
self.assertEqual(branch, tree.branch)
67
self.assertEqual(branch.base, tree.basedir)
86
self.assertEqual(branch.base, tree.basedir + '/')
69
88
def test_construct_without_branch(self):
70
branch = Branch.initialize('.')
89
branch = Branch.initialize(u'.')
71
90
tree = WorkingTree(branch.base)
72
91
self.assertEqual(branch.base, tree.branch.base)
73
self.assertEqual(branch.base, tree.basedir)
92
self.assertEqual(branch.base, tree.basedir + '/')
75
94
def test_basic_relpath(self):
76
95
# for comprehensive relpath tests, see whitebox.py.
77
branch = Branch.initialize('.')
96
branch = Branch.initialize(u'.')
78
97
tree = WorkingTree(branch.base)
79
98
self.assertEqual('child',
80
tree.relpath(os.path.join(os.getcwd(), 'child')))
99
tree.relpath(pathjoin(getcwd(), 'child')))
82
101
def test_lock_locks_branch(self):
83
branch = Branch.initialize('.')
102
branch = Branch.initialize(u'.')
84
103
tree = WorkingTree(branch.base)
86
105
self.assertEqual(1, tree.branch._lock_count)
119
139
def test_revert(self):
120
140
"""Test selected-file revert"""
121
b = Branch.initialize('.')
141
b = Branch.initialize(u'.')
123
143
self.build_tree(['hello.txt'])
124
144
file('hello.txt', 'w').write('initial hello')
126
146
self.assertRaises(NotVersionedError,
127
147
b.working_tree().revert, ['hello.txt'])
130
b.working_tree().commit('create initial hello.txt')
148
tree = WorkingTree(b.base, b)
149
tree.add(['hello.txt'])
150
tree.commit('create initial hello.txt')
132
152
self.check_file_contents('hello.txt', 'initial hello')
133
153
file('hello.txt', 'w').write('new hello')
134
154
self.check_file_contents('hello.txt', 'new hello')
136
wt = b.working_tree()
138
156
# revert file modified since last revision
139
wt.revert(['hello.txt'])
157
tree.revert(['hello.txt'])
140
158
self.check_file_contents('hello.txt', 'initial hello')
141
159
self.check_file_contents('hello.txt~', 'new hello')
143
161
# reverting again does not clobber the backup
144
wt.revert(['hello.txt'])
162
tree.revert(['hello.txt'])
145
163
self.check_file_contents('hello.txt', 'initial hello')
146
164
self.check_file_contents('hello.txt~', 'new hello')
166
def test_unknowns(self):
167
b = Branch.initialize(u'.')
168
tree = WorkingTree(u'.', b)
169
self.build_tree(['hello.txt',
171
self.assertEquals(list(tree.unknowns()),
174
def test_hashcache(self):
175
from bzrlib.tests.test_hashcache import pause
176
b = Branch.initialize(u'.')
177
tree = WorkingTree(u'.', b)
178
self.build_tree(['hello.txt',
180
tree.add('hello.txt')
182
sha = tree.get_file_sha1(tree.path2id('hello.txt'))
183
self.assertEqual(1, tree._hashcache.miss_count)
184
tree2 = WorkingTree(u'.', b)
185
sha2 = tree2.get_file_sha1(tree2.path2id('hello.txt'))
186
self.assertEqual(0, tree2._hashcache.miss_count)
187
self.assertEqual(1, tree2._hashcache.hit_count)