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 (
37
TestCaseWithTransport,
40
from bzrlib.tests.matchers import MatchesAncestry
38
43
# TODO: Test commit with some added, and added-but-missing files
108
113
self.assertEqual('version 2', text)
115
def test_commit_lossy_native(self):
116
"""Attempt a lossy commit to a native branch."""
117
wt = self.make_branch_and_tree('.')
119
file('hello', 'w').write('hello world')
121
revid = wt.commit(message='add hello', rev_id='revid', lossy=True)
122
self.assertEquals('revid', revid)
124
def test_commit_lossy_foreign(self):
125
"""Attempt a lossy commit to a foreign branch."""
126
test_foreign.register_dummy_foreign_for_test(self)
127
wt = self.make_branch_and_tree('.',
128
format=test_foreign.DummyForeignVcsDirFormat())
130
file('hello', 'w').write('hello world')
132
revid = wt.commit(message='add hello', lossy=True,
133
timestamp=1302659388, timezone=0)
134
self.assertEquals('dummy-v1:1302659388.0-0-UNKNOWN', revid)
136
def test_commit_bound_lossy_foreign(self):
137
"""Attempt a lossy commit to a bzr branch bound to a foreign branch."""
138
test_foreign.register_dummy_foreign_for_test(self)
139
foreign_branch = self.make_branch('foreign',
140
format=test_foreign.DummyForeignVcsDirFormat())
141
wt = foreign_branch.create_checkout("local")
143
file('local/hello', 'w').write('hello world')
145
revid = wt.commit(message='add hello', lossy=True,
146
timestamp=1302659388, timezone=0)
147
self.assertEquals('dummy-v1:1302659388.0-0-0', revid)
148
self.assertEquals('dummy-v1:1302659388.0-0-0',
149
foreign_branch.last_revision())
150
self.assertEquals('dummy-v1:1302659388.0-0-0',
151
wt.branch.last_revision())
110
153
def test_missing_commit(self):
111
154
"""Test a commit with a missing file"""
112
155
wt = self.make_branch_and_tree('.')
224
267
eq(tree1.id2path('hello-id'), 'hello')
225
268
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
226
269
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')
270
self.check_tree_shape(tree1, ['hello'])
271
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
231
273
tree2 = b.repository.revision_tree('test@rev-2')
232
274
tree2.lock_read()
233
275
self.addCleanup(tree2.unlock)
234
276
eq(tree2.id2path('hello-id'), 'fruity')
235
277
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')
278
self.check_tree_shape(tree2, ['fruity'])
279
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
240
281
def test_reused_rev_id(self):
241
282
"""Test that a revision id cannot be reused in a branch"""
262
303
wt.commit('two', rev_id=r2, allow_pointless=False)
265
self.check_inventory_shape(wt.read_working_inventory(),
266
['a/', 'a/hello', 'b/'])
306
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
272
312
wt.commit('three', rev_id=r3, allow_pointless=False)
275
self.check_inventory_shape(wt.read_working_inventory(),
315
self.check_tree_shape(wt,
276
316
['a/', 'a/hello', 'a/b/'])
277
self.check_inventory_shape(b.repository.get_inventory(r3),
317
self.check_tree_shape(b.repository.revision_tree(r3),
278
318
['a/', 'a/hello', 'a/b/'])
284
324
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/'])
327
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
323
362
eq = self.assertEquals
324
363
eq(b.revision_history(), rev_ids)
325
364
for i in range(4):
326
anc = b.repository.get_ancestry(rev_ids[i])
327
eq(anc, [None] + rev_ids[:i+1])
365
self.assertThat(rev_ids[:i+1],
366
MatchesAncestry(b.repository, rev_ids[i]))
329
368
def test_commit_new_subdir_child_selective(self):
330
369
wt = self.make_branch_and_tree('.')
353
392
def test_strict_commit_without_unknowns(self):
354
393
"""Try and commit with no unknown files and strict = True,
356
from bzrlib.errors import StrictCommitFailed
357
395
wt = self.make_branch_and_tree('.')
359
397
file('hello', 'w').write('hello world')
385
423
wt = self.make_branch_and_tree('.')
386
424
branch = wt.branch
387
425
wt.commit("base", allow_pointless=True, rev_id='A')
388
self.failIf(branch.repository.has_signature_for_revision_id('A'))
426
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
390
428
from bzrlib.testament import Testament
391
429
# monkey patch gpg signing mechanism
409
447
wt = self.make_branch_and_tree('.')
410
448
branch = wt.branch
411
449
wt.commit("base", allow_pointless=True, rev_id='A')
412
self.failIf(branch.repository.has_signature_for_revision_id('A'))
450
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
414
from bzrlib.testament import Testament
415
452
# monkey patch gpg signing mechanism
416
453
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
454
config = MustSignConfig(branch)
424
461
branch = Branch.open(self.get_url('.'))
425
462
self.assertEqual(branch.revision_history(), ['A'])
426
self.failIf(branch.repository.has_revision('B'))
463
self.assertFalse(branch.repository.has_revision('B'))
428
465
bzrlib.gpg.GPGStrategy = oldstrategy