1
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1
# Copyright (C) 2008 Canonical Ltd
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
38
38
class VcsMapping(object):
39
"""Describes the mapping between the semantics of Bazaar and a foreign VCS.
39
"""Describes the mapping between the semantics of Bazaar and a foreign vcs.
42
42
# Whether this is an experimental mapping that is still open to changes.
122
122
class ForeignVcs(object):
123
123
"""A foreign version control system."""
127
repository_format = None
129
def __init__(self, mapping_registry, abbreviation=None):
130
"""Create a new foreign vcs instance.
132
:param mapping_registry: Registry with mappings for this VCS.
133
:param abbreviation: Optional abbreviation ('bzr', 'svn', 'git', etc)
135
self.abbreviation = abbreviation
125
def __init__(self, mapping_registry):
136
126
self.mapping_registry = mapping_registry
138
128
def show_foreign_revid(self, foreign_revid):
146
def serialize_foreign_revid(self, foreign_revid):
147
"""Serialize a foreign revision id for this VCS.
149
:param foreign_revid: Foreign revision id
150
:return: Bytestring with serialized revid, will not contain any
153
raise NotImplementedError(self.serialize_foreign_revid)
156
137
class ForeignVcsRegistry(registry.Registry):
157
138
"""Registry for Foreign VCSes.
225
206
"""Get the default mapping for this repository."""
226
207
raise NotImplementedError(self.get_default_mapping)
209
def get_inventory_xml(self, revision_id):
210
"""See Repository.get_inventory_xml()."""
211
return self.serialise_inventory(self.get_inventory(revision_id))
213
def get_inventory_sha1(self, revision_id):
214
"""Get the sha1 for the XML representation of an inventory.
216
:param revision_id: Revision id of the inventory for which to return
221
return osutils.sha_string(self.get_inventory_xml(revision_id))
223
def get_revision_xml(self, revision_id):
224
"""Return the XML representation of a revision.
226
:param revision_id: Revision for which to return the XML.
229
return self._serializer.write_revision_to_string(
230
self.get_revision(revision_id))
229
233
class ForeignBranch(Branch):
230
234
"""Branch that exists in a foreign version control system."""
261
265
class cmd_dpush(Command):
262
__doc__ = """Push into a different VCS without any custom bzr metadata.
266
"""Push into a different VCS without any custom bzr metadata.
264
268
This will afterwards rebase the local branch on the remote
265
269
branch unless the --no-rebase option is used, in which case
269
273
takes_args = ['location?']
273
help='Branch to push from, '
274
'rather than the one containing the working directory.',
278
Option('no-rebase', help="Do not rebase after push."),
280
help='Refuse to push if there are uncommitted changes in'
281
' the working tree, --no-strict disables the check.'),
274
takes_options = ['remember', Option('directory',
275
help='Branch to push from, '
276
'rather than the one containing the working directory.',
280
Option('no-rebase', help="Do not rebase after push.")]
284
def run(self, location=None, remember=False, directory=None,
285
no_rebase=False, strict=None):
282
def run(self, location=None, remember=False, directory=None,
286
284
from bzrlib import urlutils
287
285
from bzrlib.bzrdir import BzrDir
288
286
from bzrlib.errors import BzrCommandError, NoWorkingTree
296
294
except NoWorkingTree:
297
295
source_branch = Branch.open(directory)
299
if source_wt is not None:
300
source_wt.check_changed_or_out_of_date(
301
strict, 'dpush_strict',
302
more_error='Use --no-strict to force the push.',
303
more_warning='Uncommitted changes will not be pushed.')
304
297
stored_loc = source_branch.get_push_location()
305
298
if location is None:
306
299
if stored_loc is None: