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.selftest import BzrTestBase, TestCaseInTempDir
26
26
from bzrlib.branch import Branch
29
class Mkdir(InTempDir):
29
logger = logging.getLogger('bzr.test.versioning')
33
class TestVersioning(TestCaseInTempDir):
31
36
"""Basic 'bzr mkdir' operation"""
32
from bzrlib.commands import run_bzr
35
run_bzr(['mkdir', 'foo'])
39
self.run_bzr('mkdir', 'foo')
36
40
self.assert_(os.path.isdir('foo'))
38
self.assertRaises(OSError, run_bzr, ['mkdir', 'foo'])
42
self.run_bzr('mkdir', 'foo', retcode=2)
40
44
from bzrlib.diff import compare_trees
41
45
from bzrlib.branch import Branch
44
48
delta = compare_trees(b.basis_tree(), b.working_tree())
49
53
self.assertEquals(delta.added[0][0], 'foo')
50
54
self.failIf(delta.modified)
54
class AddInUnversioned(InTempDir):
56
def test_branch_add_in_unversioned(self):
56
57
"""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.
59
"bzr add" adds the parent as necessary, but simple branch add
61
62
from bzrlib.branch import Branch
62
63
from bzrlib.errors import NotVersionedError
64
b = Branch('.', init=True)
65
b = Branch.initialize('.')
66
67
self.build_tree(['foo/',
74
class SubdirCommit(BzrTestBase):
76
def test_add_in_unversioned(self):
77
"""Try to add a file in an unversioned directory.
79
"bzr add" should add the parent(s) as necessary.
81
from bzrlib.branch import Branch
84
b = Branch.initialize('.')
86
self.build_tree(['inertiatic/', 'inertiatic/esp'])
87
eq(list(b.unknowns()), ['inertiatic'])
88
self.run_bzr('add', 'inertiatic/esp')
89
eq(list(b.unknowns()), [])
91
# Multiple unversioned parents
92
self.build_tree(['veil/', 'veil/cerpin/', 'veil/cerpin/taxt'])
93
eq(list(b.unknowns()), ['veil'])
94
self.run_bzr('add', 'veil/cerpin/taxt')
95
eq(list(b.unknowns()), [])
97
# Check whacky paths work
98
self.build_tree(['cicatriz/', 'cicatriz/esp'])
99
eq(list(b.unknowns()), ['cicatriz'])
100
self.run_bzr('add', 'inertiatic/../cicatriz/esp')
101
eq(list(b.unknowns()), [])
103
def test_add_in_versioned(self):
104
"""Try to add a file in a versioned directory.
106
"bzr add" should do this happily.
108
from bzrlib.branch import Branch
109
eq = self.assertEqual
111
b = Branch.initialize('.')
113
self.build_tree(['inertiatic/', 'inertiatic/esp'])
114
eq(list(b.unknowns()), ['inertiatic'])
115
self.run_bzr('add', '--no-recurse', 'inertiatic')
116
eq(list(b.unknowns()), ['inertiatic'+os.sep+'esp'])
117
self.run_bzr('add', 'inertiatic/esp')
118
eq(list(b.unknowns()), [])
120
def test_subdir_add(self):
121
"""Add in subdirectory should add only things from there down"""
123
from bzrlib.branch import Branch
125
eq = self.assertEqual
129
b = Branch.initialize('.')
130
self.build_tree(['src/', 'README'])
132
eq(sorted(b.unknowns()),
135
self.run_bzr('add', 'src')
137
self.build_tree(['src/foo.c'])
142
eq(sorted(b.unknowns()),
144
eq(len(b.inventory), 3)
148
eq(list(b.unknowns()), [])
152
def check_branch(self):
153
"""After all the above changes, run the check and upgrade commands.
155
The upgrade should be a no-op."""
157
debug('branch has %d revisions', b.revno())
159
debug('check branch...')
160
from bzrlib.check import check
165
class SubdirCommit(TestCaseInTempDir):
167
def test_subdir_commit(self):
76
168
"""Test committing a subdirectory, and committing within a directory."""
77
169
run_bzr = self.run_bzr
78
170
eq = self.assertEqual
91
183
for fn in ('a/one', 'b/two', 'top'):
92
184
file(fn, 'w').write('new contents')
186
debug('start selective subdir commit')
94
187
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))
189
old = b.revision_tree(b.get_rev_id(1))
190
new = b.revision_tree(b.get_rev_id(2))
99
192
eq(new.get_file_by_path('b/two').read(), 'old contents')
100
193
eq(new.get_file_by_path('top').read(), 'old contents')
104
197
# commit from here should do nothing
105
198
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
106
v3 = b.revision_tree(b.lookup_revision(3))
199
v3 = b.revision_tree(b.get_rev_id(3))
107
200
eq(v3.get_file_by_path('b/two').read(), 'old contents')
108
201
eq(v3.get_file_by_path('top').read(), 'old contents')
109
202
eq(v3.get_file_by_path('a/one').read(), 'new contents')
111
204
# commit in subdirectory commits whole tree
112
205
run_bzr('commit', '-m', 'commit whole tree from subdir')
113
v4 = b.revision_tree(b.lookup_revision(4))
206
v4 = b.revision_tree(b.get_rev_id(4))
114
207
eq(v4.get_file_by_path('b/two').read(), 'new contents')
115
208
eq(v4.get_file_by_path('top').read(), 'new contents')
117
210
# 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()), [])
213
if __name__ == '__main__':