25
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
25
from breezy.branch import Branch
26
from breezy.osutils import pathjoin
27
from breezy.tests import TestCaseInTempDir, TestCaseWithTransport
28
from breezy.trace import mutter
29
from breezy.workingtree import WorkingTree
32
32
class TestMkdir(TestCaseWithTransport):
34
34
def test_mkdir_fails_cleanly(self):
35
35
"""'mkdir' fails cleanly when no working tree is available.
36
https://bugs.edge.launchpad.net/bzr/+bug/138600
36
https://bugs.launchpad.net/bzr/+bug/138600
38
38
# Since there is a safety working tree above us, we create a bare repo
40
40
shared_repo = self.make_repository('.')
41
41
self.run_bzr(['mkdir', 'abc'], retcode=3)
42
self.failIfExists('abc')
45
class TestVersioning(TestCaseInTempDir):
42
self.assertPathDoesNotExist('abc')
47
44
def test_mkdir(self):
48
"""Basic 'bzr mkdir' operation"""
45
"""Basic 'brz mkdir' operation"""
47
self.make_branch_and_tree('.')
51
48
self.run_bzr(['mkdir', 'foo'])
52
self.assert_(os.path.isdir('foo'))
49
self.assertTrue(os.path.isdir('foo'))
54
51
self.run_bzr(['mkdir', 'foo'], retcode=3)
60
57
self.log('delta.added = %r' % delta.added)
62
self.assertEquals(len(delta.added), 1)
63
self.assertEquals(delta.added[0][0], 'foo')
64
self.failIf(delta.modified)
59
self.assertEqual(len(delta.added), 1)
60
self.assertEqual(delta.added[0][0], 'foo')
61
self.assertFalse(delta.modified)
66
63
def test_mkdir_in_subdir(self):
67
"""'bzr mkdir' operation in subdirectory"""
64
"""'brz mkdir' operation in subdirectory"""
66
self.make_branch_and_tree('.')
70
67
self.run_bzr(['mkdir', 'dir'])
71
self.assert_(os.path.isdir('dir'))
68
self.assertTrue(os.path.isdir('dir'))
74
70
self.log('Run mkdir in subdir')
75
self.run_bzr(['mkdir', 'subdir'])
76
self.assert_(os.path.isdir('subdir'))
71
self.run_bzr(['mkdir', 'subdir'], working_dir='dir')
72
self.assertTrue(os.path.isdir('dir/subdir'))
79
74
wt = WorkingTree.open('.')
83
78
self.log('delta.added = %r' % delta.added)
85
self.assertEquals(len(delta.added), 2)
86
self.assertEquals(delta.added[0][0], 'dir')
87
self.assertEquals(delta.added[1][0], pathjoin('dir','subdir'))
88
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)
90
85
def test_mkdir_w_nested_trees(self):
91
"""'bzr mkdir' with nested trees"""
86
"""'brz 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')
102
92
self.run_bzr(['mkdir', 'dir', 'a/dir', 'a/b/dir'])
103
self.failUnless(os.path.isdir('dir'))
104
self.failUnless(os.path.isdir('a/dir'))
105
self.failUnless(os.path.isdir('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'))
107
97
wt = WorkingTree.open('.')
108
98
wt_a = WorkingTree.open('a')
109
99
wt_b = WorkingTree.open('a/b')
111
101
delta = wt.changes_from(wt.basis_tree())
112
self.assertEquals(len(delta.added), 1)
113
self.assertEquals(delta.added[0][0], 'dir')
114
self.failIf(delta.modified)
102
self.assertEqual(len(delta.added), 1)
103
self.assertEqual(delta.added[0][0], 'dir')
104
self.assertFalse(delta.modified)
116
106
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.failIf(delta.modified)
107
self.assertEqual(len(delta.added), 1)
108
self.assertEqual(delta.added[0][0], 'dir')
109
self.assertFalse(delta.modified)
121
111
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.failIf(delta.modified)
126
def check_branch(self):
127
"""After all the above changes, run the check and upgrade commands.
129
The upgrade should be a no-op."""
130
b = Branch.open(u'.')
131
mutter('branch has %d revisions', b.revno())
133
mutter('check branch...')
134
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
"""'brz 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(b'', err)
122
self.assertEqual(b'', out)
138
125
class SubdirCommit(TestCaseWithTransport):
159
146
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')
149
def get_text_by_path(tree, path):
150
return tree.get_file_text(path)
152
self.assertEqual(get_text_by_path(new, 'b/two'), b'old contents')
153
self.assertEqual(get_text_by_path(new, 'top'), b'old contents')
154
self.assertEqual(get_text_by_path(new, 'a/one'), b'new contents')
168
157
# commit from here should do nothing
169
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
158
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'],
170
160
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')
162
self.assertEqual(get_text_by_path(v3, 'b/two'), b'old contents')
163
self.assertEqual(get_text_by_path(v3, 'top'), b'old contents')
164
self.assertEqual(get_text_by_path(v3, 'a/one'), b'new contents')
177
167
# commit in subdirectory commits whole tree
178
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'])
168
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'],
179
170
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')
172
self.assertEqual(get_text_by_path(v4, 'b/two'), b'new contents')
173
self.assertEqual(get_text_by_path(v4, 'top'), b'new contents')
185
176
# TODO: factor out some kind of assert_tree_state() method