/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/reconfigure.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-04 17:12:29 UTC
  • mto: This revision was merged to the branch mainline in revision 4410.
  • Revision ID: john@arbash-meinel.com-20090604171229-kbgfatt63y3u3uh1
Some small tweaks to decoding strings (avoid passing over the length 2x)

Down to 1.1s (from 1.4s) for decoding all of bzr.dev.
Also, favor decoding strings and then lists in _decode_object, since that is the
frequency we have those types inside Revisions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2010 Canonical Ltd
 
1
# Copyright (C) 2007 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
 
"""Reconfigure a bzrdir into a new tree/branch/repository layout.
18
 
 
19
 
Various types of reconfiguration operation are available either by
20
 
constructing a class or using a factory method on Reconfigure.
21
 
"""
22
 
 
 
17
"""Reconfigure a bzrdir into a new tree/branch/repository layout"""
23
18
 
24
19
from bzrlib import (
25
20
    branch,
26
21
    bzrdir,
27
22
    errors,
28
 
    trace,
29
 
    ui,
30
 
    urlutils,
31
23
    )
32
24
 
33
 
 
34
 
# TODO: common base class for all reconfigure operations, making no
35
 
# assumptions about what kind of change will be done.
36
 
 
37
 
 
38
 
class ReconfigureStackedOn(object):
39
 
    """Reconfigures a branch to be stacked on another branch."""
40
 
 
41
 
    def apply(self, bzrdir, stacked_on_url):
42
 
        branch = bzrdir.open_branch()
43
 
        # it may be a path relative to the cwd or a url; the branch wants
44
 
        # a path relative to itself...
45
 
        on_url = urlutils.relative_url(branch.base,
46
 
            urlutils.normalize_url(stacked_on_url))
47
 
        branch.lock_write()
48
 
        try:
49
 
            branch.set_stacked_on_url(on_url)
50
 
            if not trace.is_quiet():
51
 
                ui.ui_factory.note(
52
 
                    "%s is now stacked on %s\n"
53
 
                    % (branch.base, branch.get_stacked_on_url()))
54
 
        finally:
55
 
            branch.unlock()
56
 
 
57
 
 
58
 
class ReconfigureUnstacked(object):
59
 
 
60
 
    def apply(self, bzrdir):
61
 
        branch = bzrdir.open_branch()
62
 
        branch.lock_write()
63
 
        try:
64
 
            branch.set_stacked_on_url(None)
65
 
            if not trace.is_quiet():
66
 
                ui.ui_factory.note(
67
 
                    "%s is now not stacked\n"
68
 
                    % (branch.base,))
69
 
        finally:
70
 
            branch.unlock()
71
 
 
72
 
 
73
25
class Reconfigure(object):
74
26
 
75
27
    def __init__(self, bzrdir, new_bound_location=None):
76
28
        self.bzrdir = bzrdir
77
29
        self.new_bound_location = new_bound_location
78
 
        self.local_repository = None
79
30
        try:
80
31
            self.repository = self.bzrdir.find_repository()
81
32
        except errors.NoRepositoryPresent:
82
33
            self.repository = None
83
34
            self.local_repository = None
84
35
        else:
85
 
            if (self.repository.user_url == self.bzrdir.user_url):
 
36
            if (self.repository.bzrdir.root_transport.base ==
 
37
                self.bzrdir.root_transport.base):
86
38
                self.local_repository = self.repository
87
39
            else:
88
40
                self.local_repository = None
89
41
        try:
90
42
            branch = self.bzrdir.open_branch()
91
 
            if branch.user_url == bzrdir.user_url:
 
43
            if branch.bzrdir.root_transport.base == bzrdir.root_transport.base:
92
44
                self.local_branch = branch
93
45
                self.referenced_branch = None
94
46
            else:
216
168
            if not want_reference:
217
169
                self._create_repository = True
218
170
        else:
219
 
            if want_reference and (
220
 
                self.repository.user_url == self.bzrdir.user_url):
 
171
            if want_reference and (self.repository.bzrdir.root_transport.base
 
172
                                   == self.bzrdir.root_transport.base):
221
173
                if not self.repository.is_shared():
222
174
                    self._destroy_repository = True
223
175
        if self.referenced_branch is None:
264
216
 
265
217
    def _check(self):
266
218
        """Raise if reconfiguration would destroy local changes"""
267
 
        if self._destroy_tree and self.tree.has_changes():
 
219
        if self._destroy_tree:
 
220
            changes = self.tree.changes_from(self.tree.basis_tree())
 
221
            if changes.has_changed():
268
222
                raise errors.UncommittedChanges(self.tree)
269
223
        if self._create_reference and self.local_branch is not None:
270
224
            reference_branch = branch.Branch.open(self._select_bind_location())
343
297
            if self._create_reference:
344
298
                reference_branch.repository.fetch(self.repository)
345
299
            elif self.local_branch is not None and not self._destroy_branch:
346
 
                up = self.local_branch.user_transport.clone('..')
 
300
                up = self.local_branch.bzrdir.root_transport.clone('..')
347
301
                up_bzrdir = bzrdir.BzrDir.open_containing_from_transport(up)[0]
348
302
                new_repo = up_bzrdir.find_repository()
349
303
                new_repo.fetch(self.repository)
367
321
            local_branch = self.local_branch
368
322
        if self._create_reference:
369
323
            format = branch.BranchReferenceFormat().initialize(self.bzrdir,
370
 
                target_branch=reference_branch)
 
324
                reference_branch)
371
325
        if self._destroy_tree:
372
326
            self.bzrdir.destroy_workingtree()
373
327
        if self._create_tree: