~bzr-pqm/bzr/bzr.dev

3920.2.30 by Jelmer Vernooij
Review from John.
1
# Copyright (C) 2005, 2007, 2008, 2009 Canonical Ltd
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
3920.2.28 by Jelmer Vernooij
Fix FSF address.
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
16
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
17
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
18
"""Black-box tests for bzr dpush."""
19
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
20
3920.2.30 by Jelmer Vernooij
Review from John.
21
import os
22
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
23
from bzrlib.branch import (
24
    Branch,
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
25
    InterBranch,
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
26
    )
27
from bzrlib.bzrdir import (
28
    BzrDirFormat,
29
    )
30
from bzrlib.foreign import (
31
    ForeignBranch,
32
    ForeignRepository,
33
    )
34
from bzrlib.repository import (
35
    Repository,
36
    )
37
from bzrlib.tests.blackbox import (
38
    ExternalBase,
39
    )
40
from bzrlib.tests.test_foreign import (
41
    DummyForeignVcsDirFormat,
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
42
    InterToDummyVcsBranch,
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
43
    )
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
44
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
45
46
class TestDpush(ExternalBase):
47
48
    def setUp(self):
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
49
        BzrDirFormat.register_control_format(DummyForeignVcsDirFormat)
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
50
        InterBranch.register_optimiser(InterToDummyVcsBranch)
3920.2.30 by Jelmer Vernooij
Review from John.
51
        self.addCleanup(self.unregister_format)
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
52
        super(TestDpush, self).setUp()
53
3920.2.30 by Jelmer Vernooij
Review from John.
54
    def unregister_format(self):
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
55
        try:
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
56
            BzrDirFormat.unregister_control_format(DummyForeignVcsDirFormat)
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
57
        except ValueError:
58
            pass
4347.2.2 by Jelmer Vernooij
Rename dpush to lossy_push.
59
        InterBranch.unregister_optimiser(InterToDummyVcsBranch)
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
60
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
61
    def make_dummy_builder(self, relpath):
62
        builder = self.make_branch_builder(relpath, 
63
                format=DummyForeignVcsDirFormat())
64
        builder.build_snapshot('revid', None, 
65
            [('add', ('', 'TREE_ROOT', 'directory', None)),
66
             ('add', ('foo', 'fooid', 'file', 'bar'))])
67
        return builder
68
3920.2.18 by Jelmer Vernooij
make sure dpush between native branches fails.
69
    def test_dpush_native(self):
3920.2.30 by Jelmer Vernooij
Review from John.
70
        target_tree = self.make_branch_and_tree("dp")
71
        source_tree = self.make_branch_and_tree("dc")
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
72
        output, error = self.run_bzr("dpush -d dc dp", retcode=3)
73
        self.assertEquals("", output)
4368.2.2 by Jelmer Vernooij
s/not possible/not necessary/.
74
        self.assertContainsRe(error, 'in the same VCS, lossy push not necessary. Please use regular push.')
3920.2.18 by Jelmer Vernooij
make sure dpush between native branches fails.
75
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
76
    def test_dpush(self):
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
77
        branch = self.make_dummy_builder('d').get_branch()
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
78
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
79
        dc = branch.bzrdir.sprout('dc', force_new_repo=True)
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
80
        self.build_tree(("dc/foo", "blaaaa"))
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
81
        dc.open_workingtree().commit('msg')
82
4347.3.1 by Jelmer Vernooij
Return BranchPushResult instance from lossy_push() and make dpush print
83
        output, error = self.run_bzr("dpush -d dc d")
84
        self.assertEquals(error, "Pushed up to revision 2.\n")
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
85
        self.check_output("", "status dc")
86
87
    def test_dpush_new(self):
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
88
        branch = self.make_dummy_builder('d').get_branch()
89
90
        dc = branch.bzrdir.sprout('dc', force_new_repo=True)
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
91
        self.build_tree_contents([("dc/foofile", "blaaaa")])
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
92
        dc_tree = dc.open_workingtree()
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
93
        dc_tree.add("foofile")
94
        dc_tree.commit("msg")
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
95
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
96
        self.check_output("", "dpush -d dc d")
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
97
        self.check_output("2\n", "revno dc")
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
98
        self.check_output("", "status dc")
99
100
    def test_dpush_wt_diff(self):
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
101
        branch = self.make_dummy_builder('d').get_branch()
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
102
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
103
        dc = branch.bzrdir.sprout('dc', force_new_repo=True)
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
104
        self.build_tree_contents([("dc/foofile", "blaaaa")])
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
105
        dc_tree = dc.open_workingtree()
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
106
        dc_tree.add("foofile")
107
        newrevid = dc_tree.commit('msg')
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
108
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
109
        self.build_tree_contents([("dc/foofile", "blaaaal")])
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
110
        self.check_output("", "dpush -d dc d")
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
111
        self.assertFileEqual("blaaaal", "dc/foofile")
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
112
        self.check_output('modified:\n  foofile\n', "status dc")
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
113
114
    def test_diverged(self):
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
115
        builder = self.make_dummy_builder('d')
116
117
        branch = builder.get_branch()
118
119
        dc = branch.bzrdir.sprout('dc', force_new_repo=True)
3920.2.32 by Jelmer Vernooij
Avoid run_bzr for functions other than the one being tested.
120
        dc_tree = dc.open_workingtree()
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
121
122
        self.build_tree_contents([("dc/foo", "bar")])
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
123
        dc_tree.commit('msg1')
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
124
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
125
        builder.build_snapshot('revid2', None,
126
          [('modify', ('fooid', 'blie'))])
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
127
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
128
        output, error = self.run_bzr("dpush -d dc d", retcode=3)
129
        self.assertEquals(output, "")
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
130
        self.assertContainsRe(error, "have diverged")