~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_dpush.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-10-13 06:08:53 UTC
  • mfrom: (4737.1.1 merge-2.0-into-devel)
  • Revision ID: pqm@pqm.ubuntu.com-20091013060853-erk2aaj80fnkrv25
(andrew) Merge lp:bzr/2.0 into lp:bzr, including fixes for #322807,
        #389413, #402623 and documentation improvements.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009-2012 Canonical Ltd
 
1
# Copyright (C) 2005, 2007, 2008, 2009 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
18
18
"""Black-box tests for bzr dpush."""
19
19
 
20
20
 
 
21
import os
 
22
 
21
23
from bzrlib import (
22
24
    branch,
 
25
    bzrdir,
 
26
    foreign,
23
27
    tests,
 
28
    workingtree,
24
29
    )
25
30
from bzrlib.tests import (
26
 
    script,
 
31
    blackbox,
27
32
    test_foreign,
28
33
    )
29
34
from bzrlib.tests.blackbox import test_push
30
 
from bzrlib.tests.scenarios import (
31
 
    load_tests_apply_scenarios,
32
 
    )
33
 
 
34
 
 
35
 
load_tests = load_tests_apply_scenarios
36
 
 
37
 
 
38
 
class TestDpush(tests.TestCaseWithTransport):
 
35
 
 
36
 
 
37
def load_tests(standard_tests, module, loader):
 
38
    """Multiply tests for the dpush command."""
 
39
    result = loader.suiteClass()
 
40
 
 
41
    # one for each king of change
 
42
    changes_tests, remaining_tests = tests.split_suite_by_condition(
 
43
        standard_tests, tests.condition_isinstance((
 
44
                TestDpushStrictWithChanges,
 
45
                )))
 
46
    changes_scenarios = [
 
47
        ('uncommitted',
 
48
         dict(_changes_type= '_uncommitted_changes')),
 
49
        ('pending-merges',
 
50
         dict(_changes_type= '_pending_merges')),
 
51
        ('out-of-sync-trees',
 
52
         dict(_changes_type= '_out_of_sync_trees')),
 
53
        ]
 
54
    tests.multiply_tests(changes_tests, changes_scenarios, result)
 
55
    # No parametrization for the remaining tests
 
56
    result.addTests(remaining_tests)
 
57
 
 
58
    return result
 
59
 
 
60
 
 
61
class TestDpush(blackbox.ExternalBase):
39
62
 
40
63
    def setUp(self):
41
64
        super(TestDpush, self).setUp()
54
77
        source_tree = self.make_branch_and_tree("dc")
55
78
        output, error = self.run_bzr("dpush -d dc dp", retcode=3)
56
79
        self.assertEquals("", output)
57
 
        self.assertContainsRe(error,
58
 
            'in the same VCS, lossy push not necessary. Please use regular '
59
 
            'push.')
 
80
        self.assertContainsRe(error, 'in the same VCS, lossy push not necessary. Please use regular push.')
60
81
 
61
82
    def test_dpush(self):
62
83
        branch = self.make_dummy_builder('d').get_branch()
65
86
        self.build_tree(("dc/foo", "blaaaa"))
66
87
        dc.open_workingtree().commit('msg')
67
88
 
68
 
        script.run_script(self, """
69
 
            $ bzr dpush -d dc d
70
 
            2>Doing on-the-fly conversion from DummyForeignVcsRepositoryFormat() to RepositoryFormat2a().
71
 
            2>This may take some time. Upgrade the repositories to the same format for better performance.
72
 
            2>Pushed up to revision 2.
73
 
            $ bzr status dc
74
 
            """)
 
89
        output, error = self.run_bzr("dpush -d dc d")
 
90
        self.assertEquals(error, "Pushed up to revision 2.\n")
 
91
        self.check_output("", "status dc")
75
92
 
76
93
    def test_dpush_new(self):
77
94
        b = self.make_dummy_builder('d').get_branch()
82
99
        dc_tree.add("foofile")
83
100
        dc_tree.commit("msg")
84
101
 
85
 
        script.run_script(self, '''
86
 
            $ bzr dpush -d dc d
87
 
            2>Doing on-the-fly conversion from DummyForeignVcsRepositoryFormat() to RepositoryFormat2a().
88
 
            2>This may take some time. Upgrade the repositories to the same format for better performance.
89
 
            2>Pushed up to revision 2.
90
 
            $ bzr revno dc
91
 
            2
92
 
            $ bzr status dc
93
 
            ''')
 
102
        self.check_output("", "dpush -d dc d")
 
103
        self.check_output("2\n", "revno dc")
 
104
        self.check_output("", "status dc")
94
105
 
95
106
    def test_dpush_wt_diff(self):
96
107
        b = self.make_dummy_builder('d').get_branch()
102
113
        newrevid = dc_tree.commit('msg')
103
114
 
104
115
        self.build_tree_contents([("dc/foofile", "blaaaal")])
105
 
        script.run_script(self, '''
106
 
            $ bzr dpush -d dc d --no-strict
107
 
            2>Doing on-the-fly conversion from DummyForeignVcsRepositoryFormat() to RepositoryFormat2a().
108
 
            2>This may take some time. Upgrade the repositories to the same format for better performance.
109
 
            2>Pushed up to revision 2.
110
 
            ''')
 
116
        self.check_output("", "dpush -d dc d --no-strict")
111
117
        self.assertFileEqual("blaaaal", "dc/foofile")
112
118
        # if the dummy vcs wasn't that dummy we could uncomment the line below
113
119
        # self.assertFileEqual("blaaaa", "d/foofile")
114
 
        script.run_script(self, '''
115
 
            $ bzr status dc
116
 
            modified:
117
 
              foofile
118
 
            ''')
 
120
        self.check_output('modified:\n  foofile\n', "status dc")
119
121
 
120
122
    def test_diverged(self):
121
123
        builder = self.make_dummy_builder('d')
145
147
            'to', format=test_foreign.DummyForeignVcsDirFormat())
146
148
 
147
149
    def set_config_push_strict(self, value):
148
 
        br = branch.Branch.open('local')
149
 
        br.get_config_stack().set('dpush_strict', value)
 
150
        # set config var (any of bazaar.conf, locations.conf, branch.conf
 
151
        # should do)
 
152
        conf = self.tree.branch.get_config()
 
153
        conf.set_user_option('dpush_strict', value)
150
154
 
151
155
    _default_command = ['dpush', '../to']
 
156
    _default_pushed_revid = False # Doesn't aplly for dpush
 
157
 
 
158
    def assertPushSucceeds(self, args, pushed_revid=None):
 
159
        self.run_bzr(self._default_command + args,
 
160
                     working_dir=self._default_wd)
 
161
        if pushed_revid is None:
 
162
            # dpush change the revids, so we need to get back to it
 
163
            branch_from = branch.Branch.open(self._default_wd)
 
164
            pushed_revid = branch_from.last_revision()
 
165
        branch_to = branch.Branch.open('to')
 
166
        repo_to = branch_to.repository
 
167
        self.assertTrue(repo_to.has_revision(pushed_revid))
 
168
        self.assertEqual(branch_to.last_revision(), pushed_revid)
 
169
 
152
170
 
153
171
 
154
172
class TestDpushStrictWithoutChanges(TestDpushStrictMixin,
162
180
class TestDpushStrictWithChanges(TestDpushStrictMixin,
163
181
                                 test_push.TestPushStrictWithChanges):
164
182
 
165
 
    scenarios = test_push.strict_push_change_scenarios
166
 
 
167
183
    _changes_type = None # Set by load_tests
168
184
 
169
185
    def setUp(self):
172
188
 
173
189
    def test_push_with_revision(self):
174
190
        raise tests.TestNotApplicable('dpush does not handle --revision')
 
191