~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/switch.py

Merge bzr.dev, update to use new hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
from bzrlib import errors, merge, revision
20
20
from bzrlib.branch import Branch
 
21
from bzrlib.i18n import gettext
21
22
from bzrlib.trace import note
22
23
 
23
 
 
24
24
def _run_post_switch_hooks(control_dir, to_branch, force, revision_id):
25
25
    from bzrlib.branch import SwitchHookParams
26
26
    hooks = Branch.hooks['post_switch']
33
33
def switch(control_dir, to_branch, force=False, quiet=False, revision_id=None):
34
34
    """Switch the branch associated with a checkout.
35
35
 
36
 
    :param control_dir: BzrDir of the checkout to change
 
36
    :param control_dir: ControlDir of the checkout to change
37
37
    :param to_branch: branch that the checkout is to reference
38
38
    :param force: skip the check for local commits in a heavy checkout
39
39
    :param revision_id: revision ID to switch to.
51
51
def _check_pending_merges(control, force=False):
52
52
    """Check that there are no outstanding pending merges before switching.
53
53
 
54
 
    :param control: BzrDir of the branch to check
 
54
    :param control: ControlDir of the branch to check
55
55
    """
56
56
    try:
57
57
        tree = control.open_workingtree()
64
64
    # XXX: Should the tree be locked for get_parent_ids?
65
65
    existing_pending_merges = tree.get_parent_ids()[1:]
66
66
    if len(existing_pending_merges) > 0:
67
 
        raise errors.BzrCommandError('Pending merges must be '
68
 
            'committed or reverted before using switch.')
 
67
        raise errors.BzrCommandError(gettext('Pending merges must be '
 
68
            'committed or reverted before using switch.'))
69
69
 
70
70
 
71
71
def _set_branch_location(control, to_branch, force=False):
72
72
    """Set location value of a branch reference.
73
73
 
74
 
    :param control: BzrDir of the checkout to change
 
74
    :param control: ControlDir of the checkout to change
75
75
    :param to_branch: branch that the checkout is to reference
76
76
    :param force: skip the check for local commits in a heavy checkout
77
77
    """
90
90
            possible_transports = []
91
91
            try:
92
92
                if not force and _any_local_commits(b, possible_transports):
93
 
                    raise errors.BzrCommandError(
 
93
                    raise errors.BzrCommandError(gettext(
94
94
                        'Cannot switch as local commits found in the checkout. '
95
95
                        'Commit these to the bound branch or use --force to '
96
 
                        'throw them away.')
 
96
                        'throw them away.'))
97
97
            except errors.BoundBranchConnectionFailure, e:
98
 
                raise errors.BzrCommandError(
 
98
                raise errors.BzrCommandError(gettext(
99
99
                        'Unable to connect to current master branch %(target)s: '
100
 
                        '%(error)s To switch anyway, use --force.' %
 
100
                        '%(error)s To switch anyway, use --force.') %
101
101
                        e.__dict__)
102
102
            b.set_bound_location(None)
103
103
            b.pull(to_branch, overwrite=True,
104
104
                possible_transports=possible_transports)
105
105
            b.set_bound_location(to_branch.base)
 
106
            b.set_parent(b.get_master_branch().get_parent())
106
107
        else:
107
 
            raise errors.BzrCommandError('Cannot switch a branch, '
108
 
                'only a checkout.')
 
108
            raise errors.BzrCommandError(gettext('Cannot switch a branch, '
 
109
                'only a checkout.'))
109
110
 
110
111
 
111
112
def _any_local_commits(this_branch, possible_transports):
140
141
            revision_id = to_branch.last_revision()
141
142
        if tree.last_revision() == revision_id:
142
143
            if not quiet:
143
 
                note("Tree is up to date at revision %d.", to_branch.revno())
 
144
                note(gettext("Tree is up to date at revision %d."), to_branch.revno())
144
145
            return
145
146
        base_tree = source_repository.revision_tree(tree.last_revision())
146
147
        merge.Merge3Merger(tree, tree, base_tree, to_branch.repository.revision_tree(revision_id))
147
148
        tree.set_last_revision(to_branch.last_revision())
148
149
        if not quiet:
149
 
            note('Updated to revision %d.' % to_branch.revno())
 
150
            note(gettext('Updated to revision %d.') % to_branch.revno())
150
151
    finally:
151
152
        tree.unlock()