21
21
from bzrlib import (
28
25
from bzrlib.branch import Branch
29
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
26
from bzrlib.bzrdir import BzrDirMetaFormat1
30
27
from bzrlib.commit import Commit, NullCommitReporter
31
28
from bzrlib.config import BranchConfig
32
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
34
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
35
from bzrlib.workingtree import WorkingTree
29
from bzrlib.errors import (
35
from bzrlib.tests import (
36
TestCaseWithTransport,
39
from bzrlib.tests.features import (
42
from bzrlib.tests.matchers import MatchesAncestry
38
45
# TODO: Test commit with some added, and added-but-missing files
108
115
self.assertEqual('version 2', text)
117
def test_commit_lossy_native(self):
118
"""Attempt a lossy commit to a native branch."""
119
wt = self.make_branch_and_tree('.')
121
file('hello', 'w').write('hello world')
123
revid = wt.commit(message='add hello', rev_id='revid', lossy=True)
124
self.assertEquals('revid', revid)
126
def test_commit_lossy_foreign(self):
127
"""Attempt a lossy commit to a foreign branch."""
128
test_foreign.register_dummy_foreign_for_test(self)
129
wt = self.make_branch_and_tree('.',
130
format=test_foreign.DummyForeignVcsDirFormat())
132
file('hello', 'w').write('hello world')
134
revid = wt.commit(message='add hello', lossy=True,
135
timestamp=1302659388, timezone=0)
136
self.assertEquals('dummy-v1:1302659388.0-0-UNKNOWN', revid)
138
def test_commit_bound_lossy_foreign(self):
139
"""Attempt a lossy commit to a bzr branch bound to a foreign branch."""
140
test_foreign.register_dummy_foreign_for_test(self)
141
foreign_branch = self.make_branch('foreign',
142
format=test_foreign.DummyForeignVcsDirFormat())
143
wt = foreign_branch.create_checkout("local")
145
file('local/hello', 'w').write('hello world')
147
revid = wt.commit(message='add hello', lossy=True,
148
timestamp=1302659388, timezone=0)
149
self.assertEquals('dummy-v1:1302659388.0-0-0', revid)
150
self.assertEquals('dummy-v1:1302659388.0-0-0',
151
foreign_branch.last_revision())
152
self.assertEquals('dummy-v1:1302659388.0-0-0',
153
wt.branch.last_revision())
110
155
def test_missing_commit(self):
111
156
"""Test a commit with a missing file"""
112
157
wt = self.make_branch_and_tree('.')
116
161
wt.commit(message='add hello')
118
163
os.remove('hello')
119
wt.commit('removed hello', rev_id='rev2')
164
reporter = CapturingReporter()
165
wt.commit('removed hello', rev_id='rev2', reporter=reporter)
167
[('missing', u'hello'), ('deleted', u'hello')],
121
170
tree = b.repository.revision_tree('rev2')
122
171
self.assertFalse(tree.has_id('hello-id'))
224
273
eq(tree1.id2path('hello-id'), 'hello')
225
274
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
226
275
self.assertFalse(tree1.has_filename('fruity'))
227
self.check_inventory_shape(tree1.inventory, ['hello'])
228
ie = tree1.inventory['hello-id']
229
eq(ie.revision, 'test@rev-1')
276
self.check_tree_shape(tree1, ['hello'])
277
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
231
279
tree2 = b.repository.revision_tree('test@rev-2')
232
280
tree2.lock_read()
233
281
self.addCleanup(tree2.unlock)
234
282
eq(tree2.id2path('hello-id'), 'fruity')
235
283
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
236
self.check_inventory_shape(tree2.inventory, ['fruity'])
237
ie = tree2.inventory['hello-id']
238
eq(ie.revision, 'test@rev-2')
284
self.check_tree_shape(tree2, ['fruity'])
285
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
240
287
def test_reused_rev_id(self):
241
288
"""Test that a revision id cannot be reused in a branch"""
262
309
wt.commit('two', rev_id=r2, allow_pointless=False)
265
self.check_inventory_shape(wt.read_working_inventory(),
266
['a/', 'a/hello', 'b/'])
312
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
272
318
wt.commit('three', rev_id=r3, allow_pointless=False)
275
self.check_inventory_shape(wt.read_working_inventory(),
321
self.check_tree_shape(wt,
276
322
['a/', 'a/hello', 'a/b/'])
277
self.check_inventory_shape(b.repository.get_inventory(r3),
323
self.check_tree_shape(b.repository.revision_tree(r3),
278
324
['a/', 'a/hello', 'a/b/'])
284
330
wt.commit('four', rev_id=r4, allow_pointless=False)
287
self.check_inventory_shape(wt.read_working_inventory(),
288
['a/', 'a/b/hello', 'a/b/'])
333
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
323
368
eq = self.assertEquals
324
369
eq(b.revision_history(), rev_ids)
325
370
for i in range(4):
326
anc = b.repository.get_ancestry(rev_ids[i])
327
eq(anc, [None] + rev_ids[:i+1])
371
self.assertThat(rev_ids[:i+1],
372
MatchesAncestry(b.repository, rev_ids[i]))
329
374
def test_commit_new_subdir_child_selective(self):
330
375
wt = self.make_branch_and_tree('.')
353
398
def test_strict_commit_without_unknowns(self):
354
399
"""Try and commit with no unknown files and strict = True,
356
from bzrlib.errors import StrictCommitFailed
357
401
wt = self.make_branch_and_tree('.')
359
403
file('hello', 'w').write('hello world')
385
429
wt = self.make_branch_and_tree('.')
386
430
branch = wt.branch
387
431
wt.commit("base", allow_pointless=True, rev_id='A')
388
self.failIf(branch.repository.has_signature_for_revision_id('A'))
432
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
390
434
from bzrlib.testament import Testament
391
435
# monkey patch gpg signing mechanism
409
453
wt = self.make_branch_and_tree('.')
410
454
branch = wt.branch
411
455
wt.commit("base", allow_pointless=True, rev_id='A')
412
self.failIf(branch.repository.has_signature_for_revision_id('A'))
456
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
414
from bzrlib.testament import Testament
415
458
# monkey patch gpg signing mechanism
416
459
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
460
config = MustSignConfig(branch)
424
467
branch = Branch.open(self.get_url('.'))
425
468
self.assertEqual(branch.revision_history(), ['A'])
426
self.failIf(branch.repository.has_revision('B'))
469
self.assertFalse(branch.repository.has_revision('B'))
428
471
bzrlib.gpg.GPGStrategy = oldstrategy