/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: Canonical.com Patch Queue Manager
  • Date: 2009-07-20 08:56:45 UTC
  • mfrom: (4526.9.23 apply-inventory-delta)
  • Revision ID: pqm@pqm.ubuntu.com-20090720085645-54mtgybxua0yx6hw
(robertc) Add checks for inventory deltas which try to ensure that
        deltas that are not an exact fit are not applied. (Robert
        Collins, bug 397705, bug 367633)

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):
82
34
            self.repository = None
83
35
            self.local_repository = None
84
36
        else:
85
 
            if (self.repository.user_url == self.bzrdir.user_url):
 
37
            if (self.repository.bzrdir.root_transport.base ==
 
38
                self.bzrdir.root_transport.base):
86
39
                self.local_repository = self.repository
87
40
            else:
88
41
                self.local_repository = None
89
42
        try:
90
43
            branch = self.bzrdir.open_branch()
91
 
            if branch.user_url == bzrdir.user_url:
 
44
            if branch.bzrdir.root_transport.base == bzrdir.root_transport.base:
92
45
                self.local_branch = branch
93
46
                self.referenced_branch = None
94
47
            else:
216
169
            if not want_reference:
217
170
                self._create_repository = True
218
171
        else:
219
 
            if want_reference and (
220
 
                self.repository.user_url == self.bzrdir.user_url):
 
172
            if want_reference and (self.repository.bzrdir.root_transport.base
 
173
                                   == self.bzrdir.root_transport.base):
221
174
                if not self.repository.is_shared():
222
175
                    self._destroy_repository = True
223
176
        if self.referenced_branch is None:
264
217
 
265
218
    def _check(self):
266
219
        """Raise if reconfiguration would destroy local changes"""
267
 
        if self._destroy_tree and self.tree.has_changes():
 
220
        if self._destroy_tree:
 
221
            # XXX: What about pending merges ? -- vila 20090629
 
222
            if self.tree.has_changes(self.tree.basis_tree()):
268
223
                raise errors.UncommittedChanges(self.tree)
269
224
        if self._create_reference and self.local_branch is not None:
270
225
            reference_branch = branch.Branch.open(self._select_bind_location())
343
298
            if self._create_reference:
344
299
                reference_branch.repository.fetch(self.repository)
345
300
            elif self.local_branch is not None and not self._destroy_branch:
346
 
                up = self.local_branch.user_transport.clone('..')
 
301
                up = self.local_branch.bzrdir.root_transport.clone('..')
347
302
                up_bzrdir = bzrdir.BzrDir.open_containing_from_transport(up)[0]
348
303
                new_repo = up_bzrdir.find_repository()
349
304
                new_repo.fetch(self.repository)
367
322
            local_branch = self.local_branch
368
323
        if self._create_reference:
369
324
            format = branch.BranchReferenceFormat().initialize(self.bzrdir,
370
 
                target_branch=reference_branch)
 
325
                reference_branch)
371
326
        if self._destroy_tree:
372
327
            self.bzrdir.destroy_workingtree()
373
328
        if self._create_tree: