/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/switch.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-30 14:12:36 UTC
  • mfrom: (6437.3.28 2.5)
  • mto: This revision was merged to the branch mainline in revision 6522.
  • Revision ID: jelmer@samba.org-20120130141236-66k8qj1he6q2nq3r
Merge 2.5 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
from __future__ import absolute_import
 
18
 
17
19
# Original author: David Allouche
18
20
 
19
21
from bzrlib import errors, merge, revision
33
35
def switch(control_dir, to_branch, force=False, quiet=False, revision_id=None):
34
36
    """Switch the branch associated with a checkout.
35
37
 
36
 
    :param control_dir: BzrDir of the checkout to change
 
38
    :param control_dir: ControlDir of the checkout to change
37
39
    :param to_branch: branch that the checkout is to reference
38
40
    :param force: skip the check for local commits in a heavy checkout
39
41
    :param revision_id: revision ID to switch to.
43
45
        source_repository = control_dir.open_branch().repository
44
46
    except errors.NotBranchError:
45
47
        source_repository = to_branch.repository
46
 
    _set_branch_location(control_dir, to_branch, force)
 
48
    to_branch.lock_read()
 
49
    try:
 
50
        _set_branch_location(control_dir, to_branch, force)
 
51
    finally:
 
52
        to_branch.unlock()
47
53
    tree = control_dir.open_workingtree()
48
54
    _update(tree, source_repository, quiet, revision_id)
49
55
    _run_post_switch_hooks(control_dir, to_branch, force, revision_id)
51
57
def _check_pending_merges(control, force=False):
52
58
    """Check that there are no outstanding pending merges before switching.
53
59
 
54
 
    :param control: BzrDir of the branch to check
 
60
    :param control: ControlDir of the branch to check
55
61
    """
56
62
    try:
57
63
        tree = control.open_workingtree()
71
77
def _set_branch_location(control, to_branch, force=False):
72
78
    """Set location value of a branch reference.
73
79
 
74
 
    :param control: BzrDir of the checkout to change
 
80
    :param control: ControlDir of the checkout to change
75
81
    :param to_branch: branch that the checkout is to reference
76
82
    :param force: skip the check for local commits in a heavy checkout
77
83
    """
105
111
            b.set_bound_location(to_branch.base)
106
112
            b.set_parent(b.get_master_branch().get_parent())
107
113
        else:
108
 
            raise errors.BzrCommandError(gettext('Cannot switch a branch, '
109
 
                'only a checkout.'))
 
114
            # If this is a standalone tree and the new branch
 
115
            # is derived from this one, create a lightweight checkout.
 
116
            b.lock_read()
 
117
            try:
 
118
                graph = b.repository.get_graph(to_branch.repository)
 
119
                if (b.bzrdir._format.colocated_branches and
 
120
                     (force or graph.is_ancestor(b.last_revision(),
 
121
                        to_branch.last_revision()))):
 
122
                    b.bzrdir.destroy_branch()
 
123
                    b.bzrdir.set_branch_reference(to_branch, name="")
 
124
                else:
 
125
                    raise errors.BzrCommandError(gettext('Cannot switch a branch, '
 
126
                        'only a checkout.'))
 
127
            finally:
 
128
                b.unlock()
110
129
 
111
130
 
112
131
def _any_local_commits(this_branch, possible_transports):