~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_branch/test_stacking.py

  • Committer: John Arbash Meinel
  • Date: 2009-07-29 21:35:05 UTC
  • mfrom: (4576 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4577.
  • Revision ID: john@arbash-meinel.com-20090729213505-tkqsvy1zfpocu75w
Merge bzr.dev 4576 in prep for NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
from bzrlib.revision import NULL_REVISION
25
25
from bzrlib.smart import server
26
26
from bzrlib.tests import TestNotApplicable, KnownFailure, transport_util
27
 
from bzrlib.tests.branch_implementations import TestCaseWithBranch
 
27
from bzrlib.tests.per_branch import TestCaseWithBranch
28
28
from bzrlib.transport import get_transport
29
29
 
30
30
 
78
78
            return
79
79
        self.assertEqual('../target', branch.get_stacked_on_url())
80
80
 
 
81
    def test_set_stacked_on_same_branch_raises(self):
 
82
        # Stacking on the same branch silently raises and doesn't execute the
 
83
        # change. Reported in bug 376243.
 
84
        branch = self.make_branch('branch')
 
85
        try:
 
86
            self.assertRaises(errors.UnstackableLocationError,
 
87
                branch.set_stacked_on_url, '../branch')
 
88
        except unstackable_format_errors:
 
89
            # if the set failed, so must the get
 
90
            self.assertRaises(unstackable_format_errors, branch.get_stacked_on_url)
 
91
            return
 
92
        self.assertRaises(errors.NotStacked, branch.get_stacked_on_url)
 
93
 
 
94
    def test_set_stacked_on_same_branch_after_being_stacked_raises(self):
 
95
        # Stacking on the same branch silently raises and doesn't execute the
 
96
        # change.
 
97
        branch = self.make_branch('branch')
 
98
        target = self.make_branch('target')
 
99
        try:
 
100
            branch.set_stacked_on_url('../target')
 
101
        except unstackable_format_errors:
 
102
            # if the set failed, so must the get
 
103
            self.assertRaises(unstackable_format_errors, branch.get_stacked_on_url)
 
104
            return
 
105
        self.assertRaises(errors.UnstackableLocationError,
 
106
            branch.set_stacked_on_url, '../branch')
 
107
        self.assertEqual('../target', branch.get_stacked_on_url())
 
108
 
81
109
    def assertRevisionInRepository(self, repo_path, revid):
82
110
        """Check that a revision is in a repository, disregarding stacking."""
83
111
        repo = bzrdir.BzrDir.open(repo_path).open_repository()
156
184
        trunk_revid = trunk_tree.commit('revision on mainline')
157
185
        # and make branch from it which is stacked
158
186
        try:
159
 
            new_dir = trunk_tree.bzrdir.sprout('newbranch', stacked=True)
 
187
            new_dir = trunk_tree.bzrdir.sprout(self.get_url('newbranch'),
 
188
                stacked=True)
160
189
        except unstackable_format_errors, e:
161
190
            raise TestNotApplicable(e)
162
191
        # stacked repository
163
192
        self.assertRevisionNotInRepository('newbranch', trunk_revid)
 
193
        # TODO: we'd like to commit in the stacked repository; that requires
 
194
        # some care (maybe a BranchBuilder) if it's remote and has no
 
195
        # workingtree
 
196
        ##newbranch_revid = new_dir.open_workingtree().commit('revision in '
 
197
            ##'newbranch')
164
198
        # now when we unstack that should implicitly fetch, to make sure that
165
199
        # the branch will still work
166
200
        new_branch = new_dir.open_branch()
421
455
        # Ensure that opening the branch doesn't raise.
422
456
        branch.Branch.open(transport.base)
423
457
 
 
458
    def test_revision_history_of_stacked(self):
 
459
        # See <https://launchpad.net/bugs/380314>.
 
460
        stack_on = self.make_branch_and_tree('stack-on')
 
461
        stack_on.commit('first commit', rev_id='rev1')
 
462
        try:
 
463
            stacked_dir = stack_on.bzrdir.sprout(
 
464
                self.get_url('stacked'), stacked=True)
 
465
        except unstackable_format_errors, e:
 
466
            raise TestNotApplicable('Format does not support stacking.')
 
467
        try:
 
468
            stacked = stacked_dir.open_workingtree()
 
469
        except errors.NoWorkingTree:
 
470
            stacked = stacked_dir.open_branch().create_checkout(
 
471
                'stacked-checkout', lightweight=True)
 
472
        stacked.commit('second commit', rev_id='rev2')
 
473
        # Sanity check: stacked's repo should not contain rev1, otherwise this
 
474
        # test isn't testing what it's supposed to.
 
475
        repo = stacked.branch.repository.bzrdir.open_repository()
 
476
        repo.lock_read()
 
477
        self.addCleanup(repo.unlock)
 
478
        self.assertEqual({}, repo.get_parent_map(['rev1']))
 
479
        # revision_history should work, even though the history is spread over
 
480
        # multiple repositories.
 
481
        self.assertLength(2, stacked.branch.revision_history())
 
482
 
424
483
 
425
484
class TestStackingConnections(
426
485
    transport_util.TestCaseWithConnectionHookedTransport):