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 (
35
from bzrlib.tests import (
36
TestCaseWithTransport,
39
from bzrlib.tests.features import (
42
from bzrlib.tests.matchers import MatchesAncestry
29
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
31
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
45
34
# TODO: Test commit with some added, and added-but-missing files
115
104
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())
155
106
def test_missing_commit(self):
156
107
"""Test a commit with a missing file"""
157
108
wt = self.make_branch_and_tree('.')
161
112
wt.commit(message='add hello')
163
114
os.remove('hello')
164
reporter = CapturingReporter()
165
wt.commit('removed hello', rev_id='rev2', reporter=reporter)
167
[('missing', u'hello'), ('deleted', u'hello')],
115
wt.commit('removed hello', rev_id='rev2')
170
117
tree = b.repository.revision_tree('rev2')
171
118
self.assertFalse(tree.has_id('hello-id'))
273
220
eq(tree1.id2path('hello-id'), 'hello')
274
221
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
275
222
self.assertFalse(tree1.has_filename('fruity'))
276
self.check_tree_shape(tree1, ['hello'])
277
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
223
self.check_inventory_shape(tree1.inventory, ['hello'])
224
ie = tree1.inventory['hello-id']
225
eq(ie.revision, 'test@rev-1')
279
227
tree2 = b.repository.revision_tree('test@rev-2')
280
228
tree2.lock_read()
281
229
self.addCleanup(tree2.unlock)
282
230
eq(tree2.id2path('hello-id'), 'fruity')
283
231
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
284
self.check_tree_shape(tree2, ['fruity'])
285
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
232
self.check_inventory_shape(tree2.inventory, ['fruity'])
233
ie = tree2.inventory['hello-id']
234
eq(ie.revision, 'test@rev-2')
287
236
def test_reused_rev_id(self):
288
237
"""Test that a revision id cannot be reused in a branch"""
309
258
wt.commit('two', rev_id=r2, allow_pointless=False)
312
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
261
self.check_inventory_shape(wt.read_working_inventory(),
262
['a/', 'a/hello', 'b/'])
318
268
wt.commit('three', rev_id=r3, allow_pointless=False)
321
self.check_tree_shape(wt,
271
self.check_inventory_shape(wt.read_working_inventory(),
322
272
['a/', 'a/hello', 'a/b/'])
323
self.check_tree_shape(b.repository.revision_tree(r3),
273
self.check_inventory_shape(b.repository.get_inventory(r3),
324
274
['a/', 'a/hello', 'a/b/'])
330
280
wt.commit('four', rev_id=r4, allow_pointless=False)
333
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
283
self.check_inventory_shape(wt.read_working_inventory(),
284
['a/', 'a/b/hello', 'a/b/'])
368
319
eq = self.assertEquals
369
320
eq(b.revision_history(), rev_ids)
370
321
for i in range(4):
371
self.assertThat(rev_ids[:i+1],
372
MatchesAncestry(b.repository, rev_ids[i]))
322
anc = b.repository.get_ancestry(rev_ids[i])
323
eq(anc, [None] + rev_ids[:i+1])
374
325
def test_commit_new_subdir_child_selective(self):
375
326
wt = self.make_branch_and_tree('.')
398
349
def test_strict_commit_without_unknowns(self):
399
350
"""Try and commit with no unknown files and strict = True,
352
from bzrlib.errors import StrictCommitFailed
401
353
wt = self.make_branch_and_tree('.')
403
355
file('hello', 'w').write('hello world')
429
381
wt = self.make_branch_and_tree('.')
430
382
branch = wt.branch
431
383
wt.commit("base", allow_pointless=True, rev_id='A')
432
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
384
self.failIf(branch.repository.has_signature_for_revision_id('A'))
434
386
from bzrlib.testament import Testament
435
387
# monkey patch gpg signing mechanism
453
405
wt = self.make_branch_and_tree('.')
454
406
branch = wt.branch
455
407
wt.commit("base", allow_pointless=True, rev_id='A')
456
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
408
self.failIf(branch.repository.has_signature_for_revision_id('A'))
410
from bzrlib.testament import Testament
458
411
# monkey patch gpg signing mechanism
459
412
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
460
413
config = MustSignConfig(branch)
467
420
branch = Branch.open(self.get_url('.'))
468
421
self.assertEqual(branch.revision_history(), ['A'])
469
self.assertFalse(branch.repository.has_revision('B'))
422
self.failIf(branch.repository.has_revision('B'))
471
424
bzrlib.gpg.GPGStrategy = oldstrategy