~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit.py

  • Committer: John Arbash Meinel
  • Date: 2010-02-10 17:52:08 UTC
  • mfrom: (5021 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5023.
  • Revision ID: john@arbash-meinel.com-20100210175208-bubuwav4uqigu291
Merge bzr.dev 5021 to resolve NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008 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,
24
27
    )
25
28
from bzrlib.branch import Branch
26
 
from bzrlib.bzrdir import BzrDirMetaFormat1
 
29
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
27
30
from bzrlib.commit import Commit, NullCommitReporter
28
31
from bzrlib.config import BranchConfig
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
 
32
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
 
33
                           LockContention)
 
34
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
 
35
from bzrlib.workingtree import WorkingTree
43
36
 
44
37
 
45
38
# TODO: Test commit with some added, and added-but-missing files
90
83
        b = wt.branch
91
84
        file('hello', 'w').write('hello world')
92
85
        wt.add('hello')
93
 
        rev1 = wt.commit(message='add hello')
 
86
        wt.commit(message='add hello')
94
87
        file_id = wt.path2id('hello')
95
88
 
96
89
        file('hello', 'w').write('version 2')
97
 
        rev2 = wt.commit(message='commit 2')
 
90
        wt.commit(message='commit 2')
98
91
 
99
92
        eq = self.assertEquals
100
93
        eq(b.revno(), 2)
101
 
        rev = b.repository.get_revision(rev1)
 
94
        rh = b.revision_history()
 
95
        rev = b.repository.get_revision(rh[0])
102
96
        eq(rev.message, 'add hello')
103
97
 
104
 
        tree1 = b.repository.revision_tree(rev1)
 
98
        tree1 = b.repository.revision_tree(rh[0])
105
99
        tree1.lock_read()
106
100
        text = tree1.get_file_text(file_id)
107
101
        tree1.unlock()
108
102
        self.assertEqual('hello world', text)
109
103
 
110
 
        tree2 = b.repository.revision_tree(rev2)
 
104
        tree2 = b.repository.revision_tree(rh[1])
111
105
        tree2.lock_read()
112
106
        text = tree2.get_file_text(file_id)
113
107
        tree2.unlock()
114
108
        self.assertEqual('version 2', text)
115
109
 
116
 
    def test_commit_lossy_native(self):
117
 
        """Attempt a lossy commit to a native branch."""
118
 
        wt = self.make_branch_and_tree('.')
119
 
        b = wt.branch
120
 
        file('hello', 'w').write('hello world')
121
 
        wt.add('hello')
122
 
        revid = wt.commit(message='add hello', rev_id='revid', lossy=True)
123
 
        self.assertEquals('revid', revid)
124
 
 
125
 
    def test_commit_lossy_foreign(self):
126
 
        """Attempt a lossy commit to a foreign branch."""
127
 
        test_foreign.register_dummy_foreign_for_test(self)
128
 
        wt = self.make_branch_and_tree('.',
129
 
            format=test_foreign.DummyForeignVcsDirFormat())
130
 
        b = wt.branch
131
 
        file('hello', 'w').write('hello world')
132
 
        wt.add('hello')
133
 
        revid = wt.commit(message='add hello', lossy=True,
134
 
            timestamp=1302659388, timezone=0)
135
 
        self.assertEquals('dummy-v1:1302659388.0-0-UNKNOWN', revid)
136
 
 
137
 
    def test_commit_bound_lossy_foreign(self):
138
 
        """Attempt a lossy commit to a bzr branch bound to a foreign branch."""
139
 
        test_foreign.register_dummy_foreign_for_test(self)
140
 
        foreign_branch = self.make_branch('foreign',
141
 
            format=test_foreign.DummyForeignVcsDirFormat())
142
 
        wt = foreign_branch.create_checkout("local")
143
 
        b = wt.branch
144
 
        file('local/hello', 'w').write('hello world')
145
 
        wt.add('hello')
146
 
        revid = wt.commit(message='add hello', lossy=True,
147
 
            timestamp=1302659388, timezone=0)
148
 
        self.assertEquals('dummy-v1:1302659388.0-0-0', revid)
149
 
        self.assertEquals('dummy-v1:1302659388.0-0-0',
150
 
            foreign_branch.last_revision())
151
 
        self.assertEquals('dummy-v1:1302659388.0-0-0',
152
 
            wt.branch.last_revision())
153
 
 
154
110
    def test_missing_commit(self):
155
111
        """Test a commit with a missing file"""
156
112
        wt = self.make_branch_and_tree('.')
160
116
        wt.commit(message='add hello')
161
117
 
162
118
        os.remove('hello')
163
 
        reporter = CapturingReporter()
164
 
        wt.commit('removed hello', rev_id='rev2', reporter=reporter)
165
 
        self.assertEquals(
166
 
            [('missing', u'hello'), ('deleted', u'hello')],
167
 
            reporter.calls)
 
119
        wt.commit('removed hello', rev_id='rev2')
168
120
 
169
121
        tree = b.repository.revision_tree('rev2')
170
122
        self.assertFalse(tree.has_id('hello-id'))
272
224
        eq(tree1.id2path('hello-id'), 'hello')
273
225
        eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
274
226
        self.assertFalse(tree1.has_filename('fruity'))
275
 
        self.check_tree_shape(tree1, ['hello'])
276
 
        eq(tree1.get_file_revision('hello-id'), 'test@rev-1')
 
227
        self.check_inventory_shape(tree1.inventory, ['hello'])
 
228
        ie = tree1.inventory['hello-id']
 
229
        eq(ie.revision, 'test@rev-1')
277
230
 
278
231
        tree2 = b.repository.revision_tree('test@rev-2')
279
232
        tree2.lock_read()
280
233
        self.addCleanup(tree2.unlock)
281
234
        eq(tree2.id2path('hello-id'), 'fruity')
282
235
        eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
283
 
        self.check_tree_shape(tree2, ['fruity'])
284
 
        eq(tree2.get_file_revision('hello-id'), 'test@rev-2')
 
236
        self.check_inventory_shape(tree2.inventory, ['fruity'])
 
237
        ie = tree2.inventory['hello-id']
 
238
        eq(ie.revision, 'test@rev-2')
285
239
 
286
240
    def test_reused_rev_id(self):
287
241
        """Test that a revision id cannot be reused in a branch"""
308
262
        wt.commit('two', rev_id=r2, allow_pointless=False)
309
263
        wt.lock_read()
310
264
        try:
311
 
            self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
 
265
            self.check_inventory_shape(wt.read_working_inventory(),
 
266
                                       ['a/', 'a/hello', 'b/'])
312
267
        finally:
313
268
            wt.unlock()
314
269
 
317
272
        wt.commit('three', rev_id=r3, allow_pointless=False)
318
273
        wt.lock_read()
319
274
        try:
320
 
            self.check_tree_shape(wt,
 
275
            self.check_inventory_shape(wt.read_working_inventory(),
321
276
                                       ['a/', 'a/hello', 'a/b/'])
322
 
            self.check_tree_shape(b.repository.revision_tree(r3),
 
277
            self.check_inventory_shape(b.repository.get_revision_inventory(r3),
323
278
                                       ['a/', 'a/hello', 'a/b/'])
324
279
        finally:
325
280
            wt.unlock()
329
284
        wt.commit('four', rev_id=r4, allow_pointless=False)
330
285
        wt.lock_read()
331
286
        try:
332
 
            self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
 
287
            self.check_inventory_shape(wt.read_working_inventory(),
 
288
                                       ['a/', 'a/b/hello', 'a/b/'])
333
289
        finally:
334
290
            wt.unlock()
335
291
 
336
 
        inv = b.repository.get_inventory(r4)
 
292
        inv = b.repository.get_revision_inventory(r4)
337
293
        eq(inv['hello-id'].revision, r4)
338
294
        eq(inv['a-id'].revision, r1)
339
295
        eq(inv['b-id'].revision, r3)
364
320
            rev_ids.append(rev_id)
365
321
            wt.commit(message='rev %d' % (i+1),
366
322
                     rev_id=rev_id)
 
323
        eq = self.assertEquals
 
324
        eq(b.revision_history(), rev_ids)
367
325
        for i in range(4):
368
 
            self.assertThat(rev_ids[:i+1],
369
 
                MatchesAncestry(b.repository, rev_ids[i]))
 
326
            anc = b.repository.get_ancestry(rev_ids[i])
 
327
            eq(anc, [None] + rev_ids[:i+1])
370
328
 
371
329
    def test_commit_new_subdir_child_selective(self):
372
330
        wt = self.make_branch_and_tree('.')
395
353
    def test_strict_commit_without_unknowns(self):
396
354
        """Try and commit with no unknown files and strict = True,
397
355
        should work."""
 
356
        from bzrlib.errors import StrictCommitFailed
398
357
        wt = self.make_branch_and_tree('.')
399
358
        b = wt.branch
400
359
        file('hello', 'w').write('hello world')
426
385
        wt = self.make_branch_and_tree('.')
427
386
        branch = wt.branch
428
387
        wt.commit("base", allow_pointless=True, rev_id='A')
429
 
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
 
388
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
430
389
        try:
431
390
            from bzrlib.testament import Testament
432
391
            # monkey patch gpg signing mechanism
450
409
        wt = self.make_branch_and_tree('.')
451
410
        branch = wt.branch
452
411
        wt.commit("base", allow_pointless=True, rev_id='A')
453
 
        self.assertFalse(branch.repository.has_signature_for_revision_id('A'))
 
412
        self.failIf(branch.repository.has_signature_for_revision_id('A'))
454
413
        try:
 
414
            from bzrlib.testament import Testament
455
415
            # monkey patch gpg signing mechanism
456
416
            bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
457
417
            config = MustSignConfig(branch)
462
422
                              rev_id='B',
463
423
                              working_tree=wt)
464
424
            branch = Branch.open(self.get_url('.'))
465
 
            self.assertEqual(branch.last_revision(), 'A')
466
 
            self.assertFalse(branch.repository.has_revision('B'))
 
425
            self.assertEqual(branch.revision_history(), ['A'])
 
426
            self.failIf(branch.repository.has_revision('B'))
467
427
        finally:
468
428
            bzrlib.gpg.GPGStrategy = oldstrategy
469
429