~bzr-pqm/bzr/bzr.dev

3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
1
# Copyright (C) 2008 Canonical Ltd
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
16
17
18
"""Tests for foreign VCS utility code."""
19
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
20
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
21
from bzrlib import (
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
22
    branch,
4721.2.4 by Vincent Ladeuil
More test cleanup.
23
    bzrdir,
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
24
    errors,
25
    foreign,
26
    lockable_files,
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
27
    lockdir,
4721.2.4 by Vincent Ladeuil
More test cleanup.
28
    revision,
29
    tests,
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
30
    trace,
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
31
    )
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
32
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
33
# This is the dummy foreign revision control system, used 
34
# mainly here in the testsuite to test the foreign VCS infrastructure.
35
# It is basically standard Bazaar with some minor modifications to 
36
# make it "foreign". 
37
# 
38
# It has the following differences to "regular" Bazaar:
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
39
# - The control directory is named ".dummy", not ".bzr".
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
40
# - The revision ids are tuples, not strings.
3920.2.20 by Jelmer Vernooij
Fix dpush tests.
41
# - Doesn't support more than one parent natively
3920.2.7 by Jelmer Vernooij
Add comments about dummy vcs.
42
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
43
44
class DummyForeignVcsMapping(foreign.VcsMapping):
45
    """A simple mapping for the dummy Foreign VCS, for use with testing."""
46
47
    def __eq__(self, other):
48
        return type(self) == type(other)
49
50
    def revision_id_bzr_to_foreign(self, bzr_revid):
51
        return tuple(bzr_revid[len("dummy-v1:"):].split("-")), self
52
53
    def revision_id_foreign_to_bzr(self, foreign_revid):
54
        return "dummy-v1:%s-%s-%s" % foreign_revid
55
56
57
class DummyForeignVcsMappingRegistry(foreign.VcsMappingRegistry):
58
59
    def revision_id_bzr_to_foreign(self, revid):
60
        if not revid.startswith("dummy-"):
61
            raise errors.InvalidRevisionId(revid, None)
62
        mapping_version = revid[len("dummy-"):len("dummy-vx")]
63
        mapping = self.get(mapping_version)
64
        return mapping.revision_id_bzr_to_foreign(revid)
65
66
67
class DummyForeignVcs(foreign.ForeignVcs):
68
    """A dummy Foreign VCS, for use with testing.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
69
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
70
    It has revision ids that are a tuple with three strings.
71
    """
72
73
    def __init__(self):
74
        self.mapping_registry = DummyForeignVcsMappingRegistry()
4032.1.1 by John Arbash Meinel
Merge the removal of all trailing whitespace, and resolve conflicts.
75
        self.mapping_registry.register("v1", DummyForeignVcsMapping(self),
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
76
                                       "Version 1")
4747.2.1 by Jelmer Vernooij
Allow specifying an abbreviation for foreign vcs'es and an optional function to serialize foreign revision ids.
77
        self.abbreviation = "dummy"
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
78
3949.5.1 by Jelmer Vernooij
Move ForeignVcsMapping.show_foreign_revid to ForeignVcs.
79
    def show_foreign_revid(self, foreign_revid):
80
        return { "dummy ding": "%s/%s\\%s" % foreign_revid }
81
4747.2.1 by Jelmer Vernooij
Allow specifying an abbreviation for foreign vcs'es and an optional function to serialize foreign revision ids.
82
    def serialize_foreign_revid(self, foreign_revid):
83
        return "%s|%s|%s" % foreign_revid
84
3949.5.1 by Jelmer Vernooij
Move ForeignVcsMapping.show_foreign_revid to ForeignVcs.
85
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
86
class DummyForeignVcsBranch(branch.BzrBranch6,foreign.ForeignBranch):
87
    """A Dummy VCS Branch."""
88
89
    def __init__(self, _format, _control_files, a_bzrdir, *args, **kwargs):
90
        self._format = _format
91
        self._base = a_bzrdir.transport.base
3920.2.29 by Jelmer Vernooij
Fix dpush tests.
92
        self._ignore_fallbacks = False
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
93
        foreign.ForeignBranch.__init__(self, 
94
            DummyForeignVcsMapping(DummyForeignVcs()))
95
        branch.BzrBranch6.__init__(self, _format, _control_files, a_bzrdir, 
96
            *args, **kwargs)
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
97
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
98
4347.2.2 by Jelmer Vernooij
Rename dpush to lossy_push.
99
class InterToDummyVcsBranch(branch.GenericInterBranch,
100
                            foreign.InterToForeignBranch):
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
101
4347.2.2 by Jelmer Vernooij
Rename dpush to lossy_push.
102
    @staticmethod
103
    def is_compatible(source, target):
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
104
        return isinstance(target, DummyForeignVcsBranch)
105
4347.2.2 by Jelmer Vernooij
Rename dpush to lossy_push.
106
    def lossy_push(self, stop_revision=None):
4347.3.1 by Jelmer Vernooij
Return BranchPushResult instance from lossy_push() and make dpush print
107
        result = branch.BranchPushResult()
108
        result.source_branch = self.source
109
        result.target_branch = self.target
110
        result.old_revno, result.old_revid = self.target.last_revision_info()
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
111
        self.source.lock_read()
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
112
        try:
113
            # This just handles simple cases, but that's good enough for tests
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
114
            my_history = self.target.revision_history()
115
            their_history = self.source.revision_history()
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
116
            if their_history[:min(len(my_history), len(their_history))] != my_history:
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
117
                raise errors.DivergedBranches(self.target, self.source)
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
118
            todo = their_history[len(my_history):]
119
            revidmap = {}
120
            for revid in todo:
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
121
                rev = self.source.repository.get_revision(revid)
122
                tree = self.source.repository.revision_tree(revid)
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
123
                def get_file_with_stat(file_id, path=None):
124
                    return (tree.get_file(file_id), None)
125
                tree.get_file_with_stat = get_file_with_stat
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
126
                new_revid = self.target.mapping.revision_id_foreign_to_bzr(
127
                    (str(rev.timestamp), str(rev.timezone), 
128
                        str(self.target.revno())))
129
                parent_revno, parent_revid= self.target.last_revision_info()
4721.2.4 by Vincent Ladeuil
More test cleanup.
130
                if parent_revid == revision.NULL_REVISION:
4347.3.2 by Jelmer Vernooij
Add some basic tests for lossy_push.
131
                    parent_revids = []
132
                else:
133
                    parent_revids = [parent_revid]
134
                builder = self.target.get_commit_builder(parent_revids, 
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
135
                        self.target.get_config(), rev.timestamp,
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
136
                        rev.timezone, rev.committer, rev.properties,
137
                        new_revid)
138
                try:
139
                    for path, ie in tree.inventory.iter_entries():
140
                        new_ie = ie.copy()
141
                        new_ie.revision = None
142
                        builder.record_entry_contents(new_ie, 
4347.3.2 by Jelmer Vernooij
Add some basic tests for lossy_push.
143
                            [self.target.repository.revision_tree(parent_revid).inventory],
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
144
                            path, tree, 
145
                            (ie.kind, ie.text_size, ie.executable, ie.text_sha1))
146
                    builder.finish_inventory()
147
                except:
148
                    builder.abort()
149
                    raise
150
                revidmap[revid] = builder.commit(rev.message)
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
151
                self.target.set_last_revision_info(parent_revno+1, 
152
                    revidmap[revid])
3920.2.36 by Jelmer Vernooij
Fix tests after CommitBuilder changes.
153
                trace.mutter('lossily pushed revision %s -> %s', 
154
                    revid, revidmap[revid])
155
        finally:
4347.2.1 by Jelmer Vernooij
Move dpush onto an InterBranch object.
156
            self.source.unlock()
4347.3.1 by Jelmer Vernooij
Return BranchPushResult instance from lossy_push() and make dpush print
157
        result.new_revno, result.new_revid = self.target.last_revision_info()
158
        result.revidmap = revidmap
159
        return result
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
160
161
162
class DummyForeignVcsBranchFormat(branch.BzrBranchFormat6):
163
164
    def get_format_string(self):
165
        return "Branch for Testing"
166
167
    def __init__(self):
168
        super(DummyForeignVcsBranchFormat, self).__init__()
169
        self._matchingbzrdir = DummyForeignVcsDirFormat()
170
171
    def open(self, a_bzrdir, _found=False):
172
        if not _found:
173
            raise NotImplementedError
174
        try:
175
            transport = a_bzrdir.get_branch_transport(None)
176
            control_files = lockable_files.LockableFiles(transport, 'lock',
177
                                                         lockdir.LockDir)
178
            return DummyForeignVcsBranch(_format=self,
179
                              _control_files=control_files,
180
                              a_bzrdir=a_bzrdir,
181
                              _repository=a_bzrdir.find_repository())
182
        except errors.NoSuchFile:
183
            raise errors.NotBranchError(path=transport.base)
184
185
4721.2.4 by Vincent Ladeuil
More test cleanup.
186
class DummyForeignVcsDirFormat(bzrdir.BzrDirMetaFormat1):
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
187
    """BzrDirFormat for the dummy foreign VCS."""
188
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
189
    @classmethod
190
    def get_format_string(cls):
191
        return "A Dummy VCS Dir"
192
193
    @classmethod
194
    def get_format_description(cls):
195
        return "A Dummy VCS Dir"
196
197
    @classmethod
198
    def is_supported(cls):
199
        return True
200
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
201
    def get_branch_format(self):
202
        return DummyForeignVcsBranchFormat()
203
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
204
    @classmethod
205
    def probe_transport(klass, transport):
206
        """Return the .bzrdir style format present in a directory."""
207
        if not transport.has('.dummy'):
208
            raise errors.NotBranchError(path=transport.base)
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
209
        return klass()
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
210
211
    def initialize_on_transport(self, transport):
212
        """Initialize a new bzrdir in the base directory of a Transport."""
213
        # Since we don't have a .bzr directory, inherit the
214
        # mode from the root directory
215
        temp_control = lockable_files.LockableFiles(transport,
216
                            '', lockable_files.TransportLock)
217
        temp_control._transport.mkdir('.dummy',
218
                                      # FIXME: RBC 20060121 don't peek under
219
                                      # the covers
220
                                      mode=temp_control._dir_mode)
221
        del temp_control
222
        bzrdir_transport = transport.clone('.dummy')
223
        # NB: no need to escape relative paths that are url safe.
224
        control_files = lockable_files.LockableFiles(bzrdir_transport,
225
            self._lock_file_name, self._lock_class)
226
        control_files.create_lock()
227
        return self.open(transport, _found=True)
228
229
    def _open(self, transport):
230
        return DummyForeignVcsDir(transport, self)
231
232
4721.2.4 by Vincent Ladeuil
More test cleanup.
233
class DummyForeignVcsDir(bzrdir.BzrDirMeta1):
3920.2.15 by Jelmer Vernooij
Add a DummyForeignVcsDir class.
234
235
    def __init__(self, _transport, _format):
236
        self._format = _format
237
        self.transport = _transport.clone('.dummy')
238
        self.root_transport = _transport
239
        self._mode_check_done = False
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
240
        self._control_files = lockable_files.LockableFiles(self.transport,
241
            "lock", lockable_files.TransportLock)
242
3920.2.33 by Jelmer Vernooij
Use branch_builder to create revisions in testsuite.
243
    def open_branch(self, ignore_fallbacks=True):
3920.2.19 by Jelmer Vernooij
Get everything except dpull itself working.
244
        return self._format.get_branch_format().open(self, _found=True)
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
245
3920.2.17 by Jelmer Vernooij
Override BzrDir.sprout() to avoid accelerator_tree's from being used.
246
    def cloning_metadir(self, stacked=False):
247
        """Produce a metadir suitable for cloning with."""
4721.2.4 by Vincent Ladeuil
More test cleanup.
248
        return bzrdir.format_registry.make_bzrdir("default")
3920.2.17 by Jelmer Vernooij
Override BzrDir.sprout() to avoid accelerator_tree's from being used.
249
250
    def sprout(self, url, revision_id=None, force_new_repo=False,
251
               recurse='down', possible_transports=None,
252
               accelerator_tree=None, hardlink=False, stacked=False,
253
               source_branch=None):
254
        # dirstate doesn't cope with accelerator_trees well 
255
        # that have a different control dir
256
        return super(DummyForeignVcsDir, self).sprout(url=url, 
257
                revision_id=revision_id, force_new_repo=force_new_repo, 
258
                recurse=recurse, possible_transports=possible_transports, 
259
                hardlink=hardlink, stacked=stacked, source_branch=source_branch)
260
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
261
4721.2.5 by Vincent Ladeuil
Some refactoring.
262
def register_dummy_foreign_for_test(testcase):
263
    bzrdir.BzrDirFormat.register_control_format(DummyForeignVcsDirFormat)
264
    testcase.addCleanup(bzrdir.BzrDirFormat.unregister_control_format,
265
                        DummyForeignVcsDirFormat)
266
    # We need to register the optimiser to make the dummy appears really
267
    # different from a regular bzr repository.
268
    branch.InterBranch.register_optimiser(InterToDummyVcsBranch)
269
    testcase.addCleanup(branch.InterBranch.unregister_optimiser,
270
                        InterToDummyVcsBranch)
271
272
4721.2.4 by Vincent Ladeuil
More test cleanup.
273
class ForeignVcsRegistryTests(tests.TestCase):
3920.2.10 by Jelmer Vernooij
More work trying to implement a dummy version control system.
274
    """Tests for the ForeignVcsRegistry class."""
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
275
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
276
    def test_parse_revision_id_no_dash(self):
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
277
        reg = foreign.ForeignVcsRegistry()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
278
        self.assertRaises(errors.InvalidRevisionId,
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
279
                          reg.parse_revision_id, "invalid")
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
280
281
    def test_parse_revision_id_unknown_mapping(self):
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
282
        reg = foreign.ForeignVcsRegistry()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
283
        self.assertRaises(errors.InvalidRevisionId,
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
284
                          reg.parse_revision_id, "unknown-foreignrevid")
285
286
    def test_parse_revision_id(self):
287
        reg = foreign.ForeignVcsRegistry()
3949.5.1 by Jelmer Vernooij
Move ForeignVcsMapping.show_foreign_revid to ForeignVcs.
288
        vcs = DummyForeignVcs()
289
        reg.register("dummy", vcs, "Dummy VCS")
290
        self.assertEquals((("some", "foreign", "revid"), DummyForeignVcsMapping(vcs)),
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
291
                          reg.parse_revision_id("dummy-v1:some-foreign-revid"))
292
293
4721.2.4 by Vincent Ladeuil
More test cleanup.
294
class ForeignRevisionTests(tests.TestCase):
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
295
    """Tests for the ForeignRevision class."""
296
297
    def test_create(self):
3949.5.1 by Jelmer Vernooij
Move ForeignVcsMapping.show_foreign_revid to ForeignVcs.
298
        mapp = DummyForeignVcsMapping(DummyForeignVcs())
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
299
        rev = foreign.ForeignRevision(("a", "foreign", "revid"),
3830.4.5 by Jelmer Vernooij
add tests for VCS infrastructure classes.
300
                                      mapp, "roundtripped-revid")
301
        self.assertEquals("", rev.inventory_sha1)
302
        self.assertEquals(("a", "foreign", "revid"), rev.foreign_revid)
303
        self.assertEquals(mapp, rev.mapping)
304
305
4721.2.4 by Vincent Ladeuil
More test cleanup.
306
class WorkingTreeFileUpdateTests(tests.TestCaseWithTransport):
4285.3.2 by Jelmer Vernooij
Remove unused functions for updating the file ids of a tree.
307
    """Tests for update_workingtree_fileids()."""
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
308
4285.3.1 by Aaron Bentley
Implement dpush via sexy APIs
309
    def test_update_workingtree(self):
310
        wt = self.make_branch_and_tree('br1')
311
        self.build_tree_contents([('br1/bla', 'original contents\n')])
312
        wt.add('bla', 'bla-a')
313
        wt.commit('bla-a')
4606.2.1 by Robert Collins
Fix test_foreign for 2a as default.
314
        root_id = wt.get_root_id()
4285.3.1 by Aaron Bentley
Implement dpush via sexy APIs
315
        target = wt.bzrdir.sprout('br2').open_workingtree()
316
        target.unversion(['bla-a'])
317
        target.add('bla', 'bla-b')
318
        target.commit('bla-b')
319
        target_basis = target.basis_tree()
320
        target_basis.lock_read()
321
        self.addCleanup(target_basis.unlock)
322
        foreign.update_workingtree_fileids(wt, target_basis)
323
        wt.lock_read()
324
        try:
4599.4.36 by Robert Collins
Fix an overly sensitive test.
325
            self.assertEquals(set([root_id, "bla-b"]), set(wt.inventory))
4285.3.1 by Aaron Bentley
Implement dpush via sexy APIs
326
        finally:
327
            wt.unlock()
328
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
329
4721.2.4 by Vincent Ladeuil
More test cleanup.
330
class DummyForeignVcsTests(tests.TestCaseWithTransport):
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
331
    """Very basic test for DummyForeignVcs."""
332
333
    def setUp(self):
334
        super(DummyForeignVcsTests, self).setUp()
4721.2.5 by Vincent Ladeuil
Some refactoring.
335
        register_dummy_foreign_for_test(self)
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
336
337
    def test_create(self):
338
        """Test we can create dummies."""
339
        self.make_branch_and_tree("d", format=DummyForeignVcsDirFormat())
4721.2.4 by Vincent Ladeuil
More test cleanup.
340
        dir = bzrdir.BzrDir.open("d")
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
341
        self.assertEquals("A Dummy VCS Dir", dir._format.get_format_string())
342
        dir.open_repository()
343
        dir.open_branch()
344
        dir.open_workingtree()
345
346
    def test_sprout(self):
3920.2.17 by Jelmer Vernooij
Override BzrDir.sprout() to avoid accelerator_tree's from being used.
347
        """Test we can clone dummies and that the format is not preserved."""
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
348
        self.make_branch_and_tree("d", format=DummyForeignVcsDirFormat())
4721.2.4 by Vincent Ladeuil
More test cleanup.
349
        dir = bzrdir.BzrDir.open("d")
3920.2.16 by Jelmer Vernooij
Add tests for DummyForeignVcs.
350
        newdir = dir.sprout("e")
4721.2.4 by Vincent Ladeuil
More test cleanup.
351
        self.assertNotEquals("A Dummy VCS Dir",
352
                             newdir._format.get_format_string())
4347.3.2 by Jelmer Vernooij
Add some basic tests for lossy_push.
353
354
    def test_lossy_push_empty(self):
355
        source_tree = self.make_branch_and_tree("source")
356
        target_tree = self.make_branch_and_tree("target", 
357
            format=DummyForeignVcsDirFormat())
358
        pushresult = source_tree.branch.lossy_push(target_tree.branch)
4721.2.4 by Vincent Ladeuil
More test cleanup.
359
        self.assertEquals(revision.NULL_REVISION, pushresult.old_revid)
360
        self.assertEquals(revision.NULL_REVISION, pushresult.new_revid)
4347.3.2 by Jelmer Vernooij
Add some basic tests for lossy_push.
361
        self.assertEquals({}, pushresult.revidmap)
362
363
    def test_lossy_push_simple(self):
364
        source_tree = self.make_branch_and_tree("source")
365
        self.build_tree(['source/a', 'source/b'])
366
        source_tree.add(['a', 'b'])
367
        revid1 = source_tree.commit("msg")
368
        target_tree = self.make_branch_and_tree("target", 
369
            format=DummyForeignVcsDirFormat())
370
        target_tree.branch.lock_write()
371
        try:
372
            pushresult = source_tree.branch.lossy_push(target_tree.branch)
373
        finally:
374
            target_tree.branch.unlock()
4721.2.4 by Vincent Ladeuil
More test cleanup.
375
        self.assertEquals(revision.NULL_REVISION, pushresult.old_revid)
4347.3.2 by Jelmer Vernooij
Add some basic tests for lossy_push.
376
        self.assertEquals({revid1:target_tree.branch.last_revision()}, 
377
                           pushresult.revidmap)
378
        self.assertEquals(pushresult.revidmap[revid1], pushresult.new_revid)