25
from bzrlib.tests import BzrTestBase, TestCaseInTempDir
26
25
from bzrlib.branch import Branch
26
from bzrlib.osutils import pathjoin
27
from bzrlib.tests import TestCaseInTempDir, TestCaseWithTransport
27
28
from bzrlib.trace import mutter
28
from bzrlib.osutils import pathjoin
31
class TestVersioning(TestCaseInTempDir):
29
from bzrlib.workingtree import WorkingTree
32
class TestMkdir(TestCaseWithTransport):
34
def test_mkdir_fails_cleanly(self):
35
"""'mkdir' fails cleanly when no working tree is available.
36
https://bugs.launchpad.net/bzr/+bug/138600
38
# Since there is a safety working tree above us, we create a bare repo
40
shared_repo = self.make_repository('.')
41
self.run_bzr(['mkdir', 'abc'], retcode=3)
42
self.assertPathDoesNotExist('abc')
34
45
"""Basic 'bzr mkdir' operation"""
37
self.run_bzr('mkdir', 'foo')
47
self.make_branch_and_tree('.')
48
self.run_bzr(['mkdir', 'foo'])
38
49
self.assert_(os.path.isdir('foo'))
40
self.run_bzr('mkdir', 'foo', retcode=3)
42
from bzrlib.diff import compare_trees
43
from bzrlib.branch import Branch
46
delta = compare_trees(b.basis_tree(), b.working_tree())
51
self.run_bzr(['mkdir', 'foo'], retcode=3)
53
wt = WorkingTree.open('.')
55
delta = wt.changes_from(wt.basis_tree())
48
57
self.log('delta.added = %r' % delta.added)
50
59
self.assertEquals(len(delta.added), 1)
51
60
self.assertEquals(delta.added[0][0], 'foo')
52
self.failIf(delta.modified)
61
self.assertFalse(delta.modified)
54
63
def test_mkdir_in_subdir(self):
55
64
"""'bzr mkdir' operation in subdirectory"""
58
self.run_bzr('mkdir', 'dir')
66
self.make_branch_and_tree('.')
67
self.run_bzr(['mkdir', 'dir'])
59
68
self.assert_(os.path.isdir('dir'))
62
70
self.log('Run mkdir in subdir')
63
self.run_bzr('mkdir', 'subdir')
64
self.assert_(os.path.isdir('subdir'))
67
from bzrlib.diff import compare_trees
68
from bzrlib.branch import Branch
71
delta = compare_trees(b.basis_tree(), b.working_tree())
71
self.run_bzr(['mkdir', 'subdir'], working_dir='dir')
72
self.assert_(os.path.isdir('dir/subdir'))
74
wt = WorkingTree.open('.')
76
delta = wt.changes_from(wt.basis_tree())
73
78
self.log('delta.added = %r' % delta.added)
75
80
self.assertEquals(len(delta.added), 2)
76
81
self.assertEquals(delta.added[0][0], 'dir')
77
82
self.assertEquals(delta.added[1][0], pathjoin('dir','subdir'))
78
self.failIf(delta.modified)
83
self.assertFalse(delta.modified)
80
85
def test_mkdir_w_nested_trees(self):
81
86
"""'bzr mkdir' with nested trees"""
92
self.run_bzr('mkdir', 'dir', 'a/dir', 'a/b/dir')
93
self.failUnless(os.path.isdir('dir'))
94
self.failUnless(os.path.isdir('a/dir'))
95
self.failUnless(os.path.isdir('a/b/dir'))
97
from bzrlib.diff import compare_trees
99
b_a = Branch.open('a')
100
b_b = Branch.open('a/b')
102
delta = compare_trees(b.basis_tree(), b.working_tree())
103
self.assertEquals(len(delta.added), 1)
104
self.assertEquals(delta.added[0][0], 'dir')
105
self.failIf(delta.modified)
107
delta = compare_trees(b_a.basis_tree(), b_a.working_tree())
108
self.assertEquals(len(delta.added), 1)
109
self.assertEquals(delta.added[0][0], 'dir')
110
self.failIf(delta.modified)
112
delta = compare_trees(b_b.basis_tree(), b_b.working_tree())
113
self.assertEquals(len(delta.added), 1)
114
self.assertEquals(delta.added[0][0], 'dir')
115
self.failIf(delta.modified)
117
def test_working_tree_add_in_unversioned(self):
118
"""Try to add a file in an unversioned directory.
120
"bzr add" adds the parent as necessary, but simple working tree add
123
from bzrlib.branch import Branch
124
from bzrlib.errors import NotVersionedError
125
from bzrlib.workingtree import WorkingTree
127
b = Branch.initialize(u'.')
129
self.build_tree(['foo/',
132
self.assertRaises(NotVersionedError,
133
WorkingTree(b.base, b).add,
138
def check_branch(self):
139
"""After all the above changes, run the check and upgrade commands.
141
The upgrade should be a no-op."""
142
b = Branch.open(u'.')
143
mutter('branch has %d revisions', b.revno())
145
mutter('check branch...')
146
from bzrlib.check import check
150
class SubdirCommit(TestCaseInTempDir):
88
self.make_branch_and_tree('.')
89
self.make_branch_and_tree('a')
90
self.make_branch_and_tree('a/b')
92
self.run_bzr(['mkdir', 'dir', 'a/dir', 'a/b/dir'])
93
self.assertTrue(os.path.isdir('dir'))
94
self.assertTrue(os.path.isdir('a/dir'))
95
self.assertTrue(os.path.isdir('a/b/dir'))
97
wt = WorkingTree.open('.')
98
wt_a = WorkingTree.open('a')
99
wt_b = WorkingTree.open('a/b')
101
delta = wt.changes_from(wt.basis_tree())
102
self.assertEquals(len(delta.added), 1)
103
self.assertEquals(delta.added[0][0], 'dir')
104
self.assertFalse(delta.modified)
106
delta = wt_a.changes_from(wt_a.basis_tree())
107
self.assertEquals(len(delta.added), 1)
108
self.assertEquals(delta.added[0][0], 'dir')
109
self.assertFalse(delta.modified)
111
delta = wt_b.changes_from(wt_b.basis_tree())
112
self.assertEquals(len(delta.added), 1)
113
self.assertEquals(delta.added[0][0], 'dir')
114
self.assertFalse(delta.modified)
116
def test_mkdir_quiet(self):
117
"""'bzr mkdir --quiet' should not print a status message"""
119
self.make_branch_and_tree('.')
120
out, err = self.run_bzr(['mkdir', '--quiet', 'foo'])
121
self.assertEquals('', err)
122
self.assertEquals('', out)
125
class SubdirCommit(TestCaseWithTransport):
152
127
def test_subdir_commit(self):
153
"""Test committing a subdirectory, and committing within a directory."""
154
run_bzr = self.run_bzr
155
eq = self.assertEqual
128
"""Test committing a subdirectory, and committing a directory."""
129
tree = self.make_branch_and_tree('.')
157
131
self.build_tree(['a/', 'b/'])
160
b = Branch.open(u'.')
162
for fn in ('a/one', 'b/two', 'top'):
163
file(fn, 'w').write('old contents')
166
run_bzr('commit', '-m', 'first revision')
168
for fn in ('a/one', 'b/two', 'top'):
169
file(fn, 'w').write('new contents')
132
def set_contents(contents):
133
self.build_tree_contents([
138
set_contents('old contents')
139
tree.smart_add(['.'])
140
tree.commit('first revision')
141
set_contents('new contents')
171
143
mutter('start selective subdir commit')
172
run_bzr('commit', 'a', '-m', 'commit a only')
174
old = b.repository.revision_tree(b.get_rev_id(1))
144
self.run_bzr(['commit', 'a', '-m', 'commit a only'])
175
146
new = b.repository.revision_tree(b.get_rev_id(2))
177
eq(new.get_file_by_path('b/two').read(), 'old contents')
178
eq(new.get_file_by_path('top').read(), 'old contents')
179
eq(new.get_file_by_path('a/one').read(), 'new contents')
149
def get_text_by_path(tree, path):
150
return tree.get_file_text(tree.path2id(path), path)
152
self.assertEqual(get_text_by_path(new, 'b/two'), 'old contents')
153
self.assertEqual(get_text_by_path(new, 'top'), 'old contents')
154
self.assertEqual(get_text_by_path(new, 'a/one'), 'new contents')
182
157
# commit from here should do nothing
183
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
158
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'],
184
160
v3 = b.repository.revision_tree(b.get_rev_id(3))
185
eq(v3.get_file_by_path('b/two').read(), 'old contents')
186
eq(v3.get_file_by_path('top').read(), 'old contents')
187
eq(v3.get_file_by_path('a/one').read(), 'new contents')
162
self.assertEqual(get_text_by_path(v3, 'b/two'), 'old contents')
163
self.assertEqual(get_text_by_path(v3, 'top'), 'old contents')
164
self.assertEqual(get_text_by_path(v3, 'a/one'), 'new contents')
189
167
# commit in subdirectory commits whole tree
190
run_bzr('commit', '-m', 'commit whole tree from subdir')
168
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'],
191
170
v4 = b.repository.revision_tree(b.get_rev_id(4))
192
eq(v4.get_file_by_path('b/two').read(), 'new contents')
193
eq(v4.get_file_by_path('top').read(), 'new contents')
172
self.assertEqual(get_text_by_path(v4, 'b/two'), 'new contents')
173
self.assertEqual(get_text_by_path(v4, 'top'), 'new contents')
195
176
# TODO: factor out some kind of assert_tree_state() method
198
if __name__ == '__main__':