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")  | 
| 
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)  |