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('.')
224
269
eq(tree1.id2path('hello-id'), 'hello')
225
270
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
226
271
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')
272
self.check_tree_shape(tree1, ['hello'])
273
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
231
275
tree2 = b.repository.revision_tree('test@rev-2')
232
276
tree2.lock_read()
233
277
self.addCleanup(tree2.unlock)
234
278
eq(tree2.id2path('hello-id'), 'fruity')
235
279
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')
280
self.check_tree_shape(tree2, ['fruity'])
281
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
240
283
def test_reused_rev_id(self):
241
284
"""Test that a revision id cannot be reused in a branch"""
262
305
wt.commit('two', rev_id=r2, allow_pointless=False)
265
self.check_inventory_shape(wt.read_working_inventory(),
266
['a/', 'a/hello', 'b/'])
308
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
272
314
wt.commit('three', rev_id=r3, allow_pointless=False)
275
self.check_inventory_shape(wt.read_working_inventory(),
317
self.check_tree_shape(wt,
276
318
['a/', 'a/hello', 'a/b/'])
277
self.check_inventory_shape(b.repository.get_inventory(r3),
319
self.check_tree_shape(b.repository.revision_tree(r3),
278
320
['a/', 'a/hello', 'a/b/'])
284
326
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/'])
329
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
323
364
eq = self.assertEquals
324
365
eq(b.revision_history(), rev_ids)
325
366
for i in range(4):
326
anc = b.repository.get_ancestry(rev_ids[i])
327
eq(anc, [None] + rev_ids[:i+1])
367
self.assertThat(rev_ids[:i+1],
368
MatchesAncestry(b.repository, rev_ids[i]))
329
370
def test_commit_new_subdir_child_selective(self):
330
371
wt = self.make_branch_and_tree('.')
353
394
def test_strict_commit_without_unknowns(self):
354
395
"""Try and commit with no unknown files and strict = True,
356
from bzrlib.errors import StrictCommitFailed
357
397
wt = self.make_branch_and_tree('.')
359
399
file('hello', 'w').write('hello world')
385
425
wt = self.make_branch_and_tree('.')
386
426
branch = wt.branch
387
427
wt.commit("base", allow_pointless=True, rev_id='A')
388
self.failIf(branch.repository.has_signature_for_revision_id('A'))
428
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
390
430
from bzrlib.testament import Testament
391
431
# monkey patch gpg signing mechanism
409
449
wt = self.make_branch_and_tree('.')
410
450
branch = wt.branch
411
451
wt.commit("base", allow_pointless=True, rev_id='A')
412
self.failIf(branch.repository.has_signature_for_revision_id('A'))
452
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
414
from bzrlib.testament import Testament
415
454
# monkey patch gpg signing mechanism
416
455
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
456
config = MustSignConfig(branch)
424
463
branch = Branch.open(self.get_url('.'))
425
464
self.assertEqual(branch.revision_history(), ['A'])
426
self.failIf(branch.repository.has_revision('B'))
465
self.assertFalse(branch.repository.has_revision('B'))
428
467
bzrlib.gpg.GPGStrategy = oldstrategy