~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit.py

  • Committer: Patch Queue Manager
  • Date: 2011-09-22 14:12:18 UTC
  • mfrom: (6155.3.1 jam)
  • Revision ID: pqm@pqm.ubuntu.com-20110922141218-86s4uu6nqvourw4f
(jameinel) Cleanup comments bzrlib/smart/__init__.py (John A Meinel)

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
 
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
33
 
                           LockContention)
34
 
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
35
 
from bzrlib.workingtree import WorkingTree
 
29
from bzrlib.errors import (
 
30
    PointlessCommit,
 
31
    BzrError,
 
32
    SigningFailed,
 
33
    LockContention,
 
34
    )
 
35
from bzrlib.tests import (
 
36
    TestCaseWithTransport,
 
37
    test_foreign,
 
38
    )
 
39
from bzrlib.tests.features import (
 
40
    SymlinkFeature,
 
41
    )
 
42
from bzrlib.tests.matchers import MatchesAncestry
36
43
 
37
44
 
38
45
# TODO: Test commit with some added, and added-but-missing files
107
114
        tree2.unlock()
108
115
        self.assertEqual('version 2', text)
109
116
 
 
117
    def test_commit_lossy_native(self):
 
118
        """Attempt a lossy commit to a native branch."""
 
119
        wt = self.make_branch_and_tree('.')
 
120
        b = wt.branch
 
121
        file('hello', 'w').write('hello world')
 
122
        wt.add('hello')
 
123
        revid = wt.commit(message='add hello', rev_id='revid', lossy=True)
 
124
        self.assertEquals('revid', revid)
 
125
 
 
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())
 
131
        b = wt.branch
 
132
        file('hello', 'w').write('hello world')
 
133
        wt.add('hello')
 
134
        revid = wt.commit(message='add hello', lossy=True,
 
135
            timestamp=1302659388, timezone=0)
 
136
        self.assertEquals('dummy-v1:1302659388.0-0-UNKNOWN', revid)
 
137
 
 
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")
 
144
        b = wt.branch
 
145
        file('local/hello', 'w').write('hello world')
 
146
        wt.add('hello')
 
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())
 
154
 
110
155
    def test_missing_commit(self):
111
156
        """Test a commit with a missing file"""
112
157
        wt = self.make_branch_and_tree('.')
116
161
        wt.commit(message='add hello')
117
162
 
118
163
        os.remove('hello')
119
 
        wt.commit('removed hello', rev_id='rev2')
 
164
        reporter = CapturingReporter()
 
165
        wt.commit('removed hello', rev_id='rev2', reporter=reporter)
 
166
        self.assertEquals(
 
167
            [('missing', u'hello'), ('deleted', u'hello')],
 
168
            reporter.calls)
120
169
 
121
170
        tree = b.repository.revision_tree('rev2')
122
171
        self.assertFalse(tree.has_id('hello-id'))
224
273
        eq(tree1.id2path('hello-id'), 'hello')
225
274
        eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
226
275
        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')
 
276
        self.check_tree_shape(tree1, ['hello'])
 
277
        eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
230
278
 
231
279
        tree2 = b.repository.revision_tree('test@rev-2')
232
280
        tree2.lock_read()
233
281
        self.addCleanup(tree2.unlock)
234
282
        eq(tree2.id2path('hello-id'), 'fruity')
235
283
        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')
 
284
        self.check_tree_shape(tree2, ['fruity'])
 
285
        eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
239
286
 
240
287
    def test_reused_rev_id(self):
241
288
        """Test that a revision id cannot be reused in a branch"""
262
309
        wt.commit('two', rev_id=r2, allow_pointless=False)
263
310
        wt.lock_read()
264
311
        try:
265
 
            self.check_inventory_shape(wt.read_working_inventory(),
266
 
                                       ['a/', 'a/hello', 'b/'])
 
312
            self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
267
313
        finally:
268
314
            wt.unlock()
269
315
 
272
318
        wt.commit('three', rev_id=r3, allow_pointless=False)
273
319
        wt.lock_read()
274
320
        try:
275
 
            self.check_inventory_shape(wt.read_working_inventory(),
 
321
            self.check_tree_shape(wt,
276
322
                                       ['a/', 'a/hello', 'a/b/'])
277
 
            self.check_inventory_shape(b.repository.get_inventory(r3),
 
323
            self.check_tree_shape(b.repository.revision_tree(r3),
278
324
                                       ['a/', 'a/hello', 'a/b/'])
279
325
        finally:
280
326
            wt.unlock()
284
330
        wt.commit('four', rev_id=r4, allow_pointless=False)
285
331
        wt.lock_read()
286
332
        try:
287
 
            self.check_inventory_shape(wt.read_working_inventory(),
288
 
                                       ['a/', 'a/b/hello', 'a/b/'])
 
333
            self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
289
334
        finally:
290
335
            wt.unlock()
291
336
 
323
368
        eq = self.assertEquals
324
369
        eq(b.revision_history(), rev_ids)
325
370
        for i in range(4):
326
 
            anc = b.repository.get_ancestry(rev_ids[i])
327
 
            eq(anc, [None] + rev_ids[:i+1])
 
371
            self.assertThat(rev_ids[:i+1],
 
372
                MatchesAncestry(b.repository, rev_ids[i]))
328
373
 
329
374
    def test_commit_new_subdir_child_selective(self):
330
375
        wt = self.make_branch_and_tree('.')
353
398
    def test_strict_commit_without_unknowns(self):
354
399
        """Try and commit with no unknown files and strict = True,
355
400
        should work."""
356
 
        from bzrlib.errors import StrictCommitFailed
357
401
        wt = self.make_branch_and_tree('.')
358
402
        b = wt.branch
359
403
        file('hello', 'w').write('hello world')
385
429
        wt = self.make_branch_and_tree('.')
386
430
        branch = wt.branch
387
431
        wt.commit("base", allow_pointless=True, rev_id='A')
388
 
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
 
432
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
389
433
        try:
390
434
            from bzrlib.testament import Testament
391
435
            # monkey patch gpg signing mechanism
409
453
        wt = self.make_branch_and_tree('.')
410
454
        branch = wt.branch
411
455
        wt.commit("base", allow_pointless=True, rev_id='A')
412
 
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
 
456
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
413
457
        try:
414
 
            from bzrlib.testament import Testament
415
458
            # monkey patch gpg signing mechanism
416
459
            bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
460
            config = MustSignConfig(branch)
423
466
                              working_tree=wt)
424
467
            branch = Branch.open(self.get_url('.'))
425
468
            self.assertEqual(branch.revision_history(), ['A'])
426
 
            self.failIf(branch.repository.has_revision('B'))
 
469
            self.assertFalse(branch.repository.has_revision('B'))
427
470
        finally:
428
471
            bzrlib.gpg.GPGStrategy = oldstrategy
429
472