26
26
from bzrlib.bzrdir import BzrDirMetaFormat1
27
27
from bzrlib.commit import Commit, NullCommitReporter
28
28
from bzrlib.config import BranchConfig
29
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
31
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
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
34
45
# TODO: Test commit with some added, and added-but-missing files
104
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())
106
155
def test_missing_commit(self):
107
156
"""Test a commit with a missing file"""
108
157
wt = self.make_branch_and_tree('.')
220
269
eq(tree1.id2path('hello-id'), 'hello')
221
270
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
222
271
self.assertFalse(tree1.has_filename('fruity'))
223
self.check_inventory_shape(tree1.inventory, ['hello'])
224
ie = tree1.inventory['hello-id']
225
eq(ie.revision, 'test@rev-1')
272
self.check_tree_shape(tree1, ['hello'])
273
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
227
275
tree2 = b.repository.revision_tree('test@rev-2')
228
276
tree2.lock_read()
229
277
self.addCleanup(tree2.unlock)
230
278
eq(tree2.id2path('hello-id'), 'fruity')
231
279
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
232
self.check_inventory_shape(tree2.inventory, ['fruity'])
233
ie = tree2.inventory['hello-id']
234
eq(ie.revision, 'test@rev-2')
280
self.check_tree_shape(tree2, ['fruity'])
281
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
236
283
def test_reused_rev_id(self):
237
284
"""Test that a revision id cannot be reused in a branch"""
258
305
wt.commit('two', rev_id=r2, allow_pointless=False)
261
self.check_inventory_shape(wt.read_working_inventory(),
262
['a/', 'a/hello', 'b/'])
308
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
268
314
wt.commit('three', rev_id=r3, allow_pointless=False)
271
self.check_inventory_shape(wt.read_working_inventory(),
317
self.check_tree_shape(wt,
272
318
['a/', 'a/hello', 'a/b/'])
273
self.check_inventory_shape(b.repository.get_inventory(r3),
319
self.check_tree_shape(b.repository.revision_tree(r3),
274
320
['a/', 'a/hello', 'a/b/'])
280
326
wt.commit('four', rev_id=r4, allow_pointless=False)
283
self.check_inventory_shape(wt.read_working_inventory(),
284
['a/', 'a/b/hello', 'a/b/'])
329
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
319
364
eq = self.assertEquals
320
365
eq(b.revision_history(), rev_ids)
321
366
for i in range(4):
322
anc = b.repository.get_ancestry(rev_ids[i])
323
eq(anc, [None] + rev_ids[:i+1])
367
self.assertThat(rev_ids[:i+1],
368
MatchesAncestry(b.repository, rev_ids[i]))
325
370
def test_commit_new_subdir_child_selective(self):
326
371
wt = self.make_branch_and_tree('.')
349
394
def test_strict_commit_without_unknowns(self):
350
395
"""Try and commit with no unknown files and strict = True,
352
from bzrlib.errors import StrictCommitFailed
353
397
wt = self.make_branch_and_tree('.')
355
399
file('hello', 'w').write('hello world')
381
425
wt = self.make_branch_and_tree('.')
382
426
branch = wt.branch
383
427
wt.commit("base", allow_pointless=True, rev_id='A')
384
self.failIf(branch.repository.has_signature_for_revision_id('A'))
428
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
386
430
from bzrlib.testament import Testament
387
431
# monkey patch gpg signing mechanism
405
449
wt = self.make_branch_and_tree('.')
406
450
branch = wt.branch
407
451
wt.commit("base", allow_pointless=True, rev_id='A')
408
self.failIf(branch.repository.has_signature_for_revision_id('A'))
452
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
410
from bzrlib.testament import Testament
411
454
# monkey patch gpg signing mechanism
412
455
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
413
456
config = MustSignConfig(branch)
420
463
branch = Branch.open(self.get_url('.'))
421
464
self.assertEqual(branch.revision_history(), ['A'])
422
self.failIf(branch.repository.has_revision('B'))
465
self.assertFalse(branch.repository.has_revision('B'))
424
467
bzrlib.gpg.GPGStrategy = oldstrategy