~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit.py

  • Committer: Martin Pool
  • Date: 2011-06-28 22:25:28 UTC
  • mto: This revision was merged to the branch mainline in revision 6004.
  • Revision ID: mbp@canonical.com-20110628222528-gwf27vdagmxatljc
More explicit laziness

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
21
21
from bzrlib import (
22
22
    bzrdir,
23
23
    errors,
24
 
    lockdir,
25
 
    osutils,
26
 
    tests,
27
24
    )
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
29
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
33
30
                           LockContention)
34
 
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
35
 
from bzrlib.workingtree import WorkingTree
 
31
from bzrlib.tests import (
 
32
    SymlinkFeature,
 
33
    TestCaseWithTransport,
 
34
    test_foreign,
 
35
    )
36
36
 
37
37
 
38
38
# TODO: Test commit with some added, and added-but-missing files
107
107
        tree2.unlock()
108
108
        self.assertEqual('version 2', text)
109
109
 
 
110
    def test_commit_lossy_native(self):
 
111
        """Attempt a lossy commit to a native branch."""
 
112
        wt = self.make_branch_and_tree('.')
 
113
        b = wt.branch
 
114
        file('hello', 'w').write('hello world')
 
115
        wt.add('hello')
 
116
        revid = wt.commit(message='add hello', rev_id='revid', lossy=True)
 
117
        self.assertEquals('revid', revid)
 
118
 
 
119
    def test_commit_lossy_foreign(self):
 
120
        """Attempt a lossy commit to a foreign branch."""
 
121
        test_foreign.register_dummy_foreign_for_test(self)
 
122
        wt = self.make_branch_and_tree('.',
 
123
            format=test_foreign.DummyForeignVcsDirFormat())
 
124
        b = wt.branch
 
125
        file('hello', 'w').write('hello world')
 
126
        wt.add('hello')
 
127
        revid = wt.commit(message='add hello', lossy=True,
 
128
            timestamp=1302659388, timezone=0)
 
129
        self.assertEquals('dummy-v1:1302659388.0-0-UNKNOWN', revid)
 
130
 
 
131
    def test_commit_bound_lossy_foreign(self):
 
132
        """Attempt a lossy commit to a bzr branch bound to a foreign branch."""
 
133
        test_foreign.register_dummy_foreign_for_test(self)
 
134
        foreign_branch = self.make_branch('foreign',
 
135
            format=test_foreign.DummyForeignVcsDirFormat())
 
136
        wt = foreign_branch.create_checkout("local")
 
137
        b = wt.branch
 
138
        file('local/hello', 'w').write('hello world')
 
139
        wt.add('hello')
 
140
        revid = wt.commit(message='add hello', lossy=True,
 
141
            timestamp=1302659388, timezone=0)
 
142
        self.assertEquals('dummy-v1:1302659388.0-0-0', revid)
 
143
        self.assertEquals('dummy-v1:1302659388.0-0-0',
 
144
            foreign_branch.last_revision())
 
145
        self.assertEquals('dummy-v1:1302659388.0-0-0',
 
146
            wt.branch.last_revision())
 
147
 
110
148
    def test_missing_commit(self):
111
149
        """Test a commit with a missing file"""
112
150
        wt = self.make_branch_and_tree('.')
224
262
        eq(tree1.id2path('hello-id'), 'hello')
225
263
        eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
226
264
        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')
 
265
        self.check_tree_shape(tree1, ['hello'])
 
266
        eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
230
267
 
231
268
        tree2 = b.repository.revision_tree('test@rev-2')
232
269
        tree2.lock_read()
233
270
        self.addCleanup(tree2.unlock)
234
271
        eq(tree2.id2path('hello-id'), 'fruity')
235
272
        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')
 
273
        self.check_tree_shape(tree2, ['fruity'])
 
274
        eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
239
275
 
240
276
    def test_reused_rev_id(self):
241
277
        """Test that a revision id cannot be reused in a branch"""
262
298
        wt.commit('two', rev_id=r2, allow_pointless=False)
263
299
        wt.lock_read()
264
300
        try:
265
 
            self.check_inventory_shape(wt.read_working_inventory(),
266
 
                                       ['a/', 'a/hello', 'b/'])
 
301
            self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
267
302
        finally:
268
303
            wt.unlock()
269
304
 
272
307
        wt.commit('three', rev_id=r3, allow_pointless=False)
273
308
        wt.lock_read()
274
309
        try:
275
 
            self.check_inventory_shape(wt.read_working_inventory(),
 
310
            self.check_tree_shape(wt,
276
311
                                       ['a/', 'a/hello', 'a/b/'])
277
 
            self.check_inventory_shape(b.repository.get_inventory(r3),
 
312
            self.check_tree_shape(b.repository.revision_tree(r3),
278
313
                                       ['a/', 'a/hello', 'a/b/'])
279
314
        finally:
280
315
            wt.unlock()
284
319
        wt.commit('four', rev_id=r4, allow_pointless=False)
285
320
        wt.lock_read()
286
321
        try:
287
 
            self.check_inventory_shape(wt.read_working_inventory(),
288
 
                                       ['a/', 'a/b/hello', 'a/b/'])
 
322
            self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
289
323
        finally:
290
324
            wt.unlock()
291
325
 
353
387
    def test_strict_commit_without_unknowns(self):
354
388
        """Try and commit with no unknown files and strict = True,
355
389
        should work."""
356
 
        from bzrlib.errors import StrictCommitFailed
357
390
        wt = self.make_branch_and_tree('.')
358
391
        b = wt.branch
359
392
        file('hello', 'w').write('hello world')
385
418
        wt = self.make_branch_and_tree('.')
386
419
        branch = wt.branch
387
420
        wt.commit("base", allow_pointless=True, rev_id='A')
388
 
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
 
421
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
389
422
        try:
390
423
            from bzrlib.testament import Testament
391
424
            # monkey patch gpg signing mechanism
409
442
        wt = self.make_branch_and_tree('.')
410
443
        branch = wt.branch
411
444
        wt.commit("base", allow_pointless=True, rev_id='A')
412
 
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
 
445
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
413
446
        try:
414
 
            from bzrlib.testament import Testament
415
447
            # monkey patch gpg signing mechanism
416
448
            bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
449
            config = MustSignConfig(branch)
423
455
                              working_tree=wt)
424
456
            branch = Branch.open(self.get_url('.'))
425
457
            self.assertEqual(branch.revision_history(), ['A'])
426
 
            self.failIf(branch.repository.has_revision('B'))
 
458
            self.assertFalse(branch.repository.has_revision('B'))
427
459
        finally:
428
460
            bzrlib.gpg.GPGStrategy = oldstrategy
429
461