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