~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/foreign.py

  • Committer: John Arbash Meinel
  • Date: 2010-08-27 17:53:08 UTC
  • mfrom: (5390 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5393.
  • Revision ID: john@arbash-meinel.com-20100827175308-qsvcc11dkfvkrny1
Merge bzr.dev 5390

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2008-2012 Canonical Ltd
 
1
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
2
2
#
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
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
 
17
 
17
18
"""Foreign branch utilities."""
18
19
 
19
 
from __future__ import absolute_import
20
 
 
21
20
 
22
21
from bzrlib.branch import (
23
22
    Branch,
 
23
    InterBranch,
24
24
    )
25
25
from bzrlib.commands import Command, Option
26
26
from bzrlib.repository import Repository
29
29
lazy_import(globals(), """
30
30
from bzrlib import (
31
31
    errors,
 
32
    osutils,
32
33
    registry,
33
34
    transform,
34
35
    )
35
 
from bzrlib.i18n import gettext
36
36
""")
37
37
 
38
38
class VcsMapping(object):
265
265
    branch unless the --no-rebase option is used, in which case 
266
266
    the two branches will be out of sync after the push. 
267
267
    """
 
268
    hidden = True
268
269
    takes_args = ['location?']
269
270
    takes_options = [
270
271
        'remember',
283
284
    def run(self, location=None, remember=False, directory=None,
284
285
            no_rebase=False, strict=None):
285
286
        from bzrlib import urlutils
286
 
        from bzrlib.controldir import ControlDir
 
287
        from bzrlib.bzrdir import BzrDir
287
288
        from bzrlib.errors import BzrCommandError, NoWorkingTree
288
289
        from bzrlib.workingtree import WorkingTree
289
290
 
303
304
        stored_loc = source_branch.get_push_location()
304
305
        if location is None:
305
306
            if stored_loc is None:
306
 
                raise BzrCommandError(gettext("No push location known or specified."))
 
307
                raise BzrCommandError("No push location known or specified.")
307
308
            else:
308
309
                display_url = urlutils.unescape_for_display(stored_loc,
309
310
                        self.outf.encoding)
310
 
                self.outf.write(
311
 
                       gettext("Using saved location: %s\n") % display_url)
 
311
                self.outf.write("Using saved location: %s\n" % display_url)
312
312
                location = stored_loc
313
313
 
314
 
        controldir = ControlDir.open(location)
315
 
        target_branch = controldir.open_branch()
 
314
        bzrdir = BzrDir.open(location)
 
315
        target_branch = bzrdir.open_branch()
316
316
        target_branch.lock_write()
317
317
        try:
318
318
            try:
319
 
                push_result = source_branch.push(target_branch, lossy=True)
 
319
                push_result = source_branch.lossy_push(target_branch)
320
320
            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))
 
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))
324
324
            # We successfully created the target, remember it
325
325
            if source_branch.get_push_location() is None or remember:
326
 
                # FIXME: Should be done only if we succeed ? -- vila 2012-01-18
327
326
                source_branch.set_push_location(target_branch.base)
328
327
            if not no_rebase:
329
328
                old_last_revid = source_branch.last_revision()
340
339
            push_result.report(self.outf)
341
340
        finally:
342
341
            target_branch.unlock()
 
342
 
 
343
 
 
344
class InterToForeignBranch(InterBranch):
 
345
 
 
346
    def lossy_push(self, stop_revision=None):
 
347
        """Push deltas into another branch.
 
348
 
 
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.
 
353
 
 
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.
 
360
        """
 
361
        raise NotImplementedError(self.lossy_push)