25
from bzrlib.selftest import BzrTestBase, TestCaseInTempDir
25
26
from bzrlib.branch import Branch
26
from bzrlib.osutils import pathjoin
27
from bzrlib.tests import TestCaseInTempDir, TestCaseWithTransport
28
from bzrlib.trace import mutter
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')
29
logger = logging.getLogger('bzr.test.versioning')
45
33
class TestVersioning(TestCaseInTempDir):
48
36
"""Basic 'bzr mkdir' operation"""
50
38
self.run_bzr('init')
51
self.run_bzr(['mkdir', 'foo'])
39
self.run_bzr('mkdir', 'foo')
52
40
self.assert_(os.path.isdir('foo'))
54
self.run_bzr(['mkdir', 'foo'], retcode=3)
56
wt = WorkingTree.open('.')
58
delta = wt.changes_from(wt.basis_tree())
42
self.run_bzr('mkdir', 'foo', retcode=2)
44
from bzrlib.diff import compare_trees
45
from bzrlib.branch import Branch
48
delta = compare_trees(b.basis_tree(), b.working_tree())
60
50
self.log('delta.added = %r' % delta.added)
62
52
self.assertEquals(len(delta.added), 1)
63
53
self.assertEquals(delta.added[0][0], 'foo')
64
self.assertFalse(delta.modified)
54
self.failIf(delta.modified)
66
56
def test_mkdir_in_subdir(self):
67
57
"""'bzr mkdir' operation in subdirectory"""
69
59
self.run_bzr('init')
70
self.run_bzr(['mkdir', 'dir'])
60
self.run_bzr('mkdir', 'dir')
71
61
self.assert_(os.path.isdir('dir'))
74
64
self.log('Run mkdir in subdir')
75
self.run_bzr(['mkdir', 'subdir'])
65
self.run_bzr('mkdir', 'subdir')
76
66
self.assert_(os.path.isdir('subdir'))
79
wt = WorkingTree.open('.')
81
delta = wt.changes_from(wt.basis_tree())
69
from bzrlib.diff import compare_trees
70
from bzrlib.branch import Branch
73
delta = compare_trees(b.basis_tree(), b.working_tree())
83
75
self.log('delta.added = %r' % delta.added)
85
77
self.assertEquals(len(delta.added), 2)
86
78
self.assertEquals(delta.added[0][0], 'dir')
87
self.assertEquals(delta.added[1][0], pathjoin('dir','subdir'))
88
self.assertFalse(delta.modified)
79
self.assertEquals(delta.added[1][0], os.path.join('dir','subdir'))
80
self.failIf(delta.modified)
90
83
def test_mkdir_w_nested_trees(self):
91
84
"""'bzr mkdir' with nested trees"""
99
92
self.run_bzr('init')
102
self.run_bzr(['mkdir', 'dir', 'a/dir', 'a/b/dir'])
103
self.assertTrue(os.path.isdir('dir'))
104
self.assertTrue(os.path.isdir('a/dir'))
105
self.assertTrue(os.path.isdir('a/b/dir'))
107
wt = WorkingTree.open('.')
108
wt_a = WorkingTree.open('a')
109
wt_b = WorkingTree.open('a/b')
111
delta = wt.changes_from(wt.basis_tree())
112
self.assertEquals(len(delta.added), 1)
113
self.assertEquals(delta.added[0][0], 'dir')
114
self.assertFalse(delta.modified)
116
delta = wt_a.changes_from(wt_a.basis_tree())
117
self.assertEquals(len(delta.added), 1)
118
self.assertEquals(delta.added[0][0], 'dir')
119
self.assertFalse(delta.modified)
121
delta = wt_b.changes_from(wt_b.basis_tree())
122
self.assertEquals(len(delta.added), 1)
123
self.assertEquals(delta.added[0][0], 'dir')
124
self.assertFalse(delta.modified)
95
self.run_bzr('mkdir', 'dir', 'a/dir', 'a/b/dir')
96
self.failUnless(os.path.isdir('dir'))
97
self.failUnless(os.path.isdir('a/dir'))
98
self.failUnless(os.path.isdir('a/b/dir'))
100
from bzrlib.diff import compare_trees
102
b_a = Branch.open('a')
103
b_b = Branch.open('a/b')
105
delta = compare_trees(b.basis_tree(), b.working_tree())
106
self.assertEquals(len(delta.added), 1)
107
self.assertEquals(delta.added[0][0], 'dir')
108
self.failIf(delta.modified)
110
delta = compare_trees(b_a.basis_tree(), b_a.working_tree())
111
self.assertEquals(len(delta.added), 1)
112
self.assertEquals(delta.added[0][0], 'dir')
113
self.failIf(delta.modified)
115
delta = compare_trees(b_b.basis_tree(), b_b.working_tree())
116
self.assertEquals(len(delta.added), 1)
117
self.assertEquals(delta.added[0][0], 'dir')
118
self.failIf(delta.modified)
121
def test_branch_add_in_unversioned(self):
122
"""Try to add a file in an unversioned directory.
124
"bzr add" adds the parent as necessary, but simple branch add
127
from bzrlib.branch import Branch
128
from bzrlib.errors import NotVersionedError
130
b = Branch.initialize('.')
132
self.build_tree(['foo/',
135
self.assertRaises(NotVersionedError,
141
def test_add_in_unversioned(self):
142
"""Try to add a file in an unversioned directory.
144
"bzr add" should add the parent(s) as necessary.
146
from bzrlib.branch import Branch
147
eq = self.assertEqual
149
b = Branch.initialize('.')
151
self.build_tree(['inertiatic/', 'inertiatic/esp'])
152
eq(list(b.unknowns()), ['inertiatic'])
153
self.run_bzr('add', 'inertiatic/esp')
154
eq(list(b.unknowns()), [])
156
# Multiple unversioned parents
157
self.build_tree(['veil/', 'veil/cerpin/', 'veil/cerpin/taxt'])
158
eq(list(b.unknowns()), ['veil'])
159
self.run_bzr('add', 'veil/cerpin/taxt')
160
eq(list(b.unknowns()), [])
162
# Check whacky paths work
163
self.build_tree(['cicatriz/', 'cicatriz/esp'])
164
eq(list(b.unknowns()), ['cicatriz'])
165
self.run_bzr('add', 'inertiatic/../cicatriz/esp')
166
eq(list(b.unknowns()), [])
168
def test_add_in_versioned(self):
169
"""Try to add a file in a versioned directory.
171
"bzr add" should do this happily.
173
from bzrlib.branch import Branch
174
eq = self.assertEqual
176
b = Branch.initialize('.')
178
self.build_tree(['inertiatic/', 'inertiatic/esp'])
179
eq(list(b.unknowns()), ['inertiatic'])
180
self.run_bzr('add', '--no-recurse', 'inertiatic')
181
eq(list(b.unknowns()), ['inertiatic'+os.sep+'esp'])
182
self.run_bzr('add', 'inertiatic/esp')
183
eq(list(b.unknowns()), [])
185
def test_subdir_add(self):
186
"""Add in subdirectory should add only things from there down"""
188
from bzrlib.branch import Branch
190
eq = self.assertEqual
194
b = Branch.initialize('.')
196
self.build_tree(['src/', 'README'])
198
eq(sorted(b.unknowns()),
201
self.run_bzr('add', 'src')
203
self.build_tree(['src/foo.c'])
208
eq(sorted(b.unknowns()),
210
eq(len(t.read_working_inventory()), 3)
214
eq(list(b.unknowns()), [])
126
218
def check_branch(self):
127
219
"""After all the above changes, run the check and upgrade commands.
129
221
The upgrade should be a no-op."""
130
b = Branch.open(u'.')
131
mutter('branch has %d revisions', b.revno())
133
mutter('check branch...')
223
debug('branch has %d revisions', b.revno())
225
debug('check branch...')
134
226
from bzrlib.check import check
138
class SubdirCommit(TestCaseWithTransport):
231
class SubdirCommit(TestCaseInTempDir):
140
233
def test_subdir_commit(self):
141
"""Test committing a subdirectory, and committing a directory."""
142
tree = self.make_branch_and_tree('.')
234
"""Test committing a subdirectory, and committing within a directory."""
235
run_bzr = self.run_bzr
236
eq = self.assertEqual
144
238
self.build_tree(['a/', 'b/'])
145
def set_contents(contents):
146
self.build_tree_contents([
151
set_contents('old contents')
152
tree.smart_add(['.'])
153
tree.commit('first revision')
154
set_contents('new contents')
156
mutter('start selective subdir commit')
157
self.run_bzr(['commit', 'a', '-m', 'commit a only'])
159
new = b.repository.revision_tree(b.get_rev_id(2))
162
self.assertEqual(new.get_file_by_path('b/two').read(), 'old contents')
163
self.assertEqual(new.get_file_by_path('top').read(), 'old contents')
164
self.assertEqual(new.get_file_by_path('a/one').read(), 'new contents')
243
for fn in ('a/one', 'b/two', 'top'):
244
file(fn, 'w').write('old contents')
247
run_bzr('commit', '-m', 'first revision')
249
for fn in ('a/one', 'b/two', 'top'):
250
file(fn, 'w').write('new contents')
252
debug('start selective subdir commit')
253
run_bzr('commit', 'a', '-m', 'commit a only')
255
old = b.revision_tree(b.get_rev_id(1))
256
new = b.revision_tree(b.get_rev_id(2))
258
eq(new.get_file_by_path('b/two').read(), 'old contents')
259
eq(new.get_file_by_path('top').read(), 'old contents')
260
eq(new.get_file_by_path('a/one').read(), 'new contents')
168
263
# commit from here should do nothing
169
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
170
v3 = b.repository.revision_tree(b.get_rev_id(3))
172
self.assertEqual(v3.get_file_by_path('b/two').read(), 'old contents')
173
self.assertEqual(v3.get_file_by_path('top').read(), 'old contents')
174
self.assertEqual(v3.get_file_by_path('a/one').read(), 'new contents')
264
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
265
v3 = b.revision_tree(b.get_rev_id(3))
266
eq(v3.get_file_by_path('b/two').read(), 'old contents')
267
eq(v3.get_file_by_path('top').read(), 'old contents')
268
eq(v3.get_file_by_path('a/one').read(), 'new contents')
177
270
# commit in subdirectory commits whole tree
178
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'])
179
v4 = b.repository.revision_tree(b.get_rev_id(4))
181
self.assertEqual(v4.get_file_by_path('b/two').read(), 'new contents')
182
self.assertEqual(v4.get_file_by_path('top').read(), 'new contents')
271
run_bzr('commit', '-m', 'commit whole tree from subdir')
272
v4 = b.revision_tree(b.get_rev_id(4))
273
eq(v4.get_file_by_path('b/two').read(), 'new contents')
274
eq(v4.get_file_by_path('top').read(), 'new contents')
185
276
# TODO: factor out some kind of assert_tree_state() method
279
if __name__ == '__main__':