29
29
from bzrlib.workingtree import WorkingTree
32
class TestVersioning(TestCaseInTempDir):
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
44
def test_mkdir(self):
35
45
"""Basic 'bzr mkdir' operation"""
38
self.run_bzr('mkdir foo')
39
self.assert_(os.path.isdir('foo'))
47
self.make_branch_and_tree('.')
48
self.run_bzr(['mkdir', 'foo'])
49
self.assertTrue(os.path.isdir('foo'))
41
self.run_bzr('mkdir foo', retcode=3)
51
self.run_bzr(['mkdir', 'foo'], retcode=3)
43
53
wt = WorkingTree.open('.')
47
57
self.log('delta.added = %r' % delta.added)
49
self.assertEquals(len(delta.added), 1)
50
self.assertEquals(delta.added[0][0], 'foo')
51
self.failIf(delta.modified)
59
self.assertEqual(len(delta.added), 1)
60
self.assertEqual(delta.added[0][0], 'foo')
61
self.assertFalse(delta.modified)
53
63
def test_mkdir_in_subdir(self):
54
64
"""'bzr mkdir' operation in subdirectory"""
57
self.run_bzr('mkdir dir')
58
self.assert_(os.path.isdir('dir'))
66
self.make_branch_and_tree('.')
67
self.run_bzr(['mkdir', 'dir'])
68
self.assertTrue(os.path.isdir('dir'))
61
70
self.log('Run mkdir in subdir')
62
self.run_bzr('mkdir subdir')
63
self.assert_(os.path.isdir('subdir'))
71
self.run_bzr(['mkdir', 'subdir'], working_dir='dir')
72
self.assertTrue(os.path.isdir('dir/subdir'))
66
74
wt = WorkingTree.open('.')
70
78
self.log('delta.added = %r' % delta.added)
72
self.assertEquals(len(delta.added), 2)
73
self.assertEquals(delta.added[0][0], 'dir')
74
self.assertEquals(delta.added[1][0], pathjoin('dir','subdir'))
75
self.failIf(delta.modified)
80
self.assertEqual(len(delta.added), 2)
81
self.assertEqual(delta.added[0][0], 'dir')
82
self.assertEqual(delta.added[1][0], pathjoin('dir','subdir'))
83
self.assertFalse(delta.modified)
77
85
def test_mkdir_w_nested_trees(self):
78
86
"""'bzr mkdir' with nested trees"""
88
self.make_branch_and_tree('.')
89
self.make_branch_and_tree('a')
90
self.make_branch_and_tree('a/b')
89
self.run_bzr('mkdir dir a/dir a/b/dir')
90
self.failUnless(os.path.isdir('dir'))
91
self.failUnless(os.path.isdir('a/dir'))
92
self.failUnless(os.path.isdir('a/b/dir'))
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'))
94
97
wt = WorkingTree.open('.')
95
98
wt_a = WorkingTree.open('a')
96
99
wt_b = WorkingTree.open('a/b')
98
101
delta = wt.changes_from(wt.basis_tree())
99
self.assertEquals(len(delta.added), 1)
100
self.assertEquals(delta.added[0][0], 'dir')
101
self.failIf(delta.modified)
102
self.assertEqual(len(delta.added), 1)
103
self.assertEqual(delta.added[0][0], 'dir')
104
self.assertFalse(delta.modified)
103
106
delta = wt_a.changes_from(wt_a.basis_tree())
104
self.assertEquals(len(delta.added), 1)
105
self.assertEquals(delta.added[0][0], 'dir')
106
self.failIf(delta.modified)
107
self.assertEqual(len(delta.added), 1)
108
self.assertEqual(delta.added[0][0], 'dir')
109
self.assertFalse(delta.modified)
108
111
delta = wt_b.changes_from(wt_b.basis_tree())
109
self.assertEquals(len(delta.added), 1)
110
self.assertEquals(delta.added[0][0], 'dir')
111
self.failIf(delta.modified)
113
def check_branch(self):
114
"""After all the above changes, run the check and upgrade commands.
116
The upgrade should be a no-op."""
117
b = Branch.open(u'.')
118
mutter('branch has %d revisions', b.revno())
120
mutter('check branch...')
121
from bzrlib.check import check
112
self.assertEqual(len(delta.added), 1)
113
self.assertEqual(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.assertEqual('', err)
122
self.assertEqual('', out)
125
125
class SubdirCommit(TestCaseWithTransport):
146
146
new = b.repository.revision_tree(b.get_rev_id(2))
149
self.assertEqual(new.get_file_by_path('b/two').read(), 'old contents')
150
self.assertEqual(new.get_file_by_path('top').read(), 'old contents')
151
self.assertEqual(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')
155
157
# commit from here should do nothing
156
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
158
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'],
157
160
v3 = b.repository.revision_tree(b.get_rev_id(3))
159
self.assertEqual(v3.get_file_by_path('b/two').read(), 'old contents')
160
self.assertEqual(v3.get_file_by_path('top').read(), 'old contents')
161
self.assertEqual(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')
164
167
# commit in subdirectory commits whole tree
165
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'])
168
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'],
166
170
v4 = b.repository.revision_tree(b.get_rev_id(4))
168
self.assertEqual(v4.get_file_by_path('b/two').read(), 'new contents')
169
self.assertEqual(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')
172
176
# TODO: factor out some kind of assert_tree_state() method