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].path[1], '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].path[1], 'dir')
82
self.assertEqual(delta.added[1].path[1], 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].path[1], '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].path[1], '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].path[1], '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('', err)
122
self.assertEqual('', out)
138
125
class SubdirCommit(TestCaseWithTransport):
142
129
tree = self.make_branch_and_tree('.')
144
131
self.build_tree(['a/', 'b/'])
145
133
def set_contents(contents):
146
134
self.build_tree_contents([
147
135
('a/one', contents),
148
136
('b/two', contents),
149
137
('top', contents),
151
set_contents('old contents')
139
set_contents(b'old contents')
152
140
tree.smart_add(['.'])
153
141
tree.commit('first revision')
154
set_contents('new contents')
142
set_contents(b'new contents')
156
144
mutter('start selective subdir commit')
157
145
self.run_bzr(['commit', 'a', '-m', 'commit a only'])
159
147
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')
150
def get_text_by_path(tree, path):
151
return tree.get_file_text(path)
153
self.assertEqual(get_text_by_path(new, 'b/two'), b'old contents')
154
self.assertEqual(get_text_by_path(new, 'top'), b'old contents')
155
self.assertEqual(get_text_by_path(new, 'a/one'), b'new contents')
168
158
# commit from here should do nothing
169
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
159
self.run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'],
170
161
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')
163
self.assertEqual(get_text_by_path(v3, 'b/two'), b'old contents')
164
self.assertEqual(get_text_by_path(v3, 'top'), b'old contents')
165
self.assertEqual(get_text_by_path(v3, 'a/one'), b'new contents')
177
168
# commit in subdirectory commits whole tree
178
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'])
169
self.run_bzr(['commit', '-m', 'commit whole tree from subdir'],
179
171
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')
173
self.assertEqual(get_text_by_path(v4, 'b/two'), b'new contents')
174
self.assertEqual(get_text_by_path(v4, 'top'), b'new contents')
185
177
# TODO: factor out some kind of assert_tree_state() method