/brz/remove-bazaar

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