283
283
def run(self, location=None, remember=False, directory=None,
284
284
no_rebase=False, strict=None):
285
285
from bzrlib import urlutils
286
from bzrlib.controldir import ControlDir
286
from bzrlib.bzrdir import BzrDir
287
287
from bzrlib.errors import BzrCommandError, NoWorkingTree
288
288
from bzrlib.workingtree import WorkingTree
303
303
stored_loc = source_branch.get_push_location()
304
304
if location is None:
305
305
if stored_loc is None:
306
raise BzrCommandError(gettext("No push location known or specified."))
306
raise BzrCommandError("No push location known or specified.")
308
308
display_url = urlutils.unescape_for_display(stored_loc,
309
309
self.outf.encoding)
311
gettext("Using saved location: %s\n") % display_url)
310
self.outf.write("Using saved location: %s\n" % display_url)
312
311
location = stored_loc
314
controldir = ControlDir.open(location)
315
target_branch = controldir.open_branch()
313
bzrdir = BzrDir.open(location)
314
target_branch = bzrdir.open_branch()
316
315
target_branch.lock_write()
319
push_result = source_branch.push(target_branch, lossy=True)
318
push_result = source_branch.lossy_push(target_branch)
320
319
except errors.LossyPushToSameVCS:
321
raise BzrCommandError(gettext("{0!r} and {1!r} are in the same VCS, lossy "
322
"push not necessary. Please use regular push.").format(
323
source_branch, target_branch))
320
raise BzrCommandError("%r and %r are in the same VCS, lossy "
321
"push not necessary. Please use regular push." %
322
(source_branch, target_branch))
324
323
# We successfully created the target, remember it
325
324
if source_branch.get_push_location() is None or remember:
326
325
source_branch.set_push_location(target_branch.base)
339
338
push_result.report(self.outf)
341
340
target_branch.unlock()
343
class InterToForeignBranch(InterBranch):
345
def lossy_push(self, stop_revision=None):
346
"""Push deltas into another branch.
348
:note: This does not, like push, retain the revision ids from
349
the source branch and will, rather than adding bzr-specific
350
metadata, push only those semantics of the revision that can be
351
natively represented by this branch' VCS.
353
:param target: Target branch
354
:param stop_revision: Revision to push, defaults to last revision.
355
:return: BranchPushResult with an extra member revidmap:
356
A dictionary mapping revision ids from the target branch
357
to new revision ids in the target branch, for each
358
revision that was pushed.
360
raise NotImplementedError(self.lossy_push)