18
18
"""Tests of simple versioning operations"""
20
# TODO: test adding a file whose directory is not versioned
21
20
# TODO: test trying to commit within a directory that is not yet added
25
from bzrlib.selftest import InTempDir, BzrTestBase
25
from bzrlib.tests import BzrTestBase, TestCaseInTempDir
26
26
from bzrlib.branch import Branch
29
class Mkdir(InTempDir):
27
from bzrlib.trace import mutter
28
from bzrlib.osutils import pathjoin
31
class TestVersioning(TestCaseInTempDir):
31
34
"""Basic 'bzr mkdir' operation"""
32
from bzrlib.commands import run_bzr
35
run_bzr(['mkdir', 'foo'])
37
self.run_bzr('mkdir', 'foo')
36
38
self.assert_(os.path.isdir('foo'))
38
self.assertRaises(OSError, run_bzr, ['mkdir', 'foo'])
40
self.run_bzr('mkdir', 'foo', retcode=3)
40
42
from bzrlib.diff import compare_trees
41
43
from bzrlib.branch import Branch
44
46
delta = compare_trees(b.basis_tree(), b.working_tree())
49
51
self.assertEquals(delta.added[0][0], 'foo')
50
52
self.failIf(delta.modified)
54
class AddInUnversioned(InTempDir):
54
def test_mkdir_in_subdir(self):
55
"""'bzr mkdir' operation in subdirectory"""
58
self.run_bzr('mkdir', 'dir')
59
self.assert_(os.path.isdir('dir'))
62
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())
73
self.log('delta.added = %r' % delta.added)
75
self.assertEquals(len(delta.added), 2)
76
self.assertEquals(delta.added[0][0], 'dir')
77
self.assertEquals(delta.added[1][0], pathjoin('dir','subdir'))
78
self.failIf(delta.modified)
80
def test_mkdir_w_nested_trees(self):
81
"""'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):
56
118
"""Try to add a file in an unversioned directory.
58
smart_add may eventually add the parent as necessary, but simple
59
branch add doesn't do that.
120
"bzr add" adds the parent as necessary, but simple working tree add
61
123
from bzrlib.branch import Branch
62
124
from bzrlib.errors import NotVersionedError
125
from bzrlib.workingtree import WorkingTree
64
b = Branch('.', init=True)
127
b = Branch.initialize(u'.')
66
129
self.build_tree(['foo/',
69
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())
74
class SubdirCommit(BzrTestBase):
145
mutter('check branch...')
146
from bzrlib.check import check
150
class SubdirCommit(TestCaseInTempDir):
152
def test_subdir_commit(self):
76
153
"""Test committing a subdirectory, and committing within a directory."""
77
154
run_bzr = self.run_bzr
78
155
eq = self.assertEqual
91
168
for fn in ('a/one', 'b/two', 'top'):
92
169
file(fn, 'w').write('new contents')
171
mutter('start selective subdir commit')
94
172
run_bzr('commit', 'a', '-m', 'commit a only')
96
old = b.revision_tree(b.lookup_revision(1))
97
new = b.revision_tree(b.lookup_revision(2))
174
old = b.revision_tree(b.get_rev_id(1))
175
new = b.revision_tree(b.get_rev_id(2))
99
177
eq(new.get_file_by_path('b/two').read(), 'old contents')
100
178
eq(new.get_file_by_path('top').read(), 'old contents')
104
182
# commit from here should do nothing
105
183
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
106
v3 = b.revision_tree(b.lookup_revision(3))
184
v3 = b.revision_tree(b.get_rev_id(3))
107
185
eq(v3.get_file_by_path('b/two').read(), 'old contents')
108
186
eq(v3.get_file_by_path('top').read(), 'old contents')
109
187
eq(v3.get_file_by_path('a/one').read(), 'new contents')
111
189
# commit in subdirectory commits whole tree
112
190
run_bzr('commit', '-m', 'commit whole tree from subdir')
113
v4 = b.revision_tree(b.lookup_revision(4))
191
v4 = b.revision_tree(b.get_rev_id(4))
114
192
eq(v4.get_file_by_path('b/two').read(), 'new contents')
115
193
eq(v4.get_file_by_path('top').read(), 'new contents')
117
195
# TODO: factor out some kind of assert_tree_state() method
121
class SubdirAdd(InTempDir):
123
"""Add in subdirectory should add only things from there down"""
125
from bzrlib.branch import Branch
126
from bzrlib.commands import run_bzr
128
eq = self.assertEqual
132
b = Branch('.', init=True)
133
self.build_tree(['src/', 'README'])
135
eq(sorted(b.unknowns()),
138
eq(run_bzr(['add', 'src']), 0)
140
self.build_tree(['src/foo.c'])
143
eq(run_bzr(['add']), 0)
145
eq(sorted(b.unknowns()),
147
eq(len(b.inventory), 3)
150
eq(run_bzr(['add']), 0)
151
eq(list(b.unknowns()), [])
198
if __name__ == '__main__':