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 (
37
TestCaseWithTransport,
40
from bzrlib.tests.matchers import MatchesAncestry
34
43
# TODO: Test commit with some added, and added-but-missing files
104
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())
106
153
def test_missing_commit(self):
107
154
"""Test a commit with a missing file"""
108
155
wt = self.make_branch_and_tree('.')
220
267
eq(tree1.id2path('hello-id'), 'hello')
221
268
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
222
269
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')
270
self.check_tree_shape(tree1, ['hello'])
271
eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
227
273
tree2 = b.repository.revision_tree('test@rev-2')
228
274
tree2.lock_read()
229
275
self.addCleanup(tree2.unlock)
230
276
eq(tree2.id2path('hello-id'), 'fruity')
231
277
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')
278
self.check_tree_shape(tree2, ['fruity'])
279
eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
236
281
def test_reused_rev_id(self):
237
282
"""Test that a revision id cannot be reused in a branch"""
258
303
wt.commit('two', rev_id=r2, allow_pointless=False)
261
self.check_inventory_shape(wt.read_working_inventory(),
262
['a/', 'a/hello', 'b/'])
306
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
268
312
wt.commit('three', rev_id=r3, allow_pointless=False)
271
self.check_inventory_shape(wt.read_working_inventory(),
315
self.check_tree_shape(wt,
272
316
['a/', 'a/hello', 'a/b/'])
273
self.check_inventory_shape(b.repository.get_inventory(r3),
317
self.check_tree_shape(b.repository.revision_tree(r3),
274
318
['a/', 'a/hello', 'a/b/'])
280
324
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/'])
327
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
319
362
eq = self.assertEquals
320
363
eq(b.revision_history(), rev_ids)
321
364
for i in range(4):
322
anc = b.repository.get_ancestry(rev_ids[i])
323
eq(anc, [None] + rev_ids[:i+1])
365
self.assertThat(rev_ids[:i+1],
366
MatchesAncestry(b.repository, rev_ids[i]))
325
368
def test_commit_new_subdir_child_selective(self):
326
369
wt = self.make_branch_and_tree('.')
349
392
def test_strict_commit_without_unknowns(self):
350
393
"""Try and commit with no unknown files and strict = True,
352
from bzrlib.errors import StrictCommitFailed
353
395
wt = self.make_branch_and_tree('.')
355
397
file('hello', 'w').write('hello world')
407
449
wt.commit("base", allow_pointless=True, rev_id='A')
408
450
self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
410
from bzrlib.testament import Testament
411
452
# monkey patch gpg signing mechanism
412
453
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
413
454
config = MustSignConfig(branch)