bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
4509.3.38
by Martin Pool
 Move reconfigure --stacked-on core code into reconfigure.py  | 
1  | 
# Copyright (C) 2007, 2009 Canonical Ltd
 | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
2  | 
#
 | 
3  | 
# This program is free software; you can redistribute it and/or modify
 | 
|
4  | 
# it under the terms of the GNU General Public License as published by
 | 
|
5  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
6  | 
# (at your option) any later version.
 | 
|
7  | 
#
 | 
|
8  | 
# This program is distributed in the hope that it will be useful,
 | 
|
9  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
10  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
11  | 
# GNU General Public License for more details.
 | 
|
12  | 
#
 | 
|
13  | 
# You should have received a copy of the GNU General Public License
 | 
|
14  | 
# along with this program; if not, write to the Free Software
 | 
|
| 
4183.7.1
by Sabin Iacob
 update FSF mailing address  | 
15  | 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
16  | 
|
| 
4509.3.38
by Martin Pool
 Move reconfigure --stacked-on core code into reconfigure.py  | 
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  | 
||
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
23  | 
|
24  | 
from bzrlib import (  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
25  | 
branch,  | 
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
26  | 
bzrdir,  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
27  | 
errors,  | 
| 
4509.3.38
by Martin Pool
 Move reconfigure --stacked-on core code into reconfigure.py  | 
28  | 
trace,  | 
29  | 
ui,  | 
|
30  | 
urlutils,  | 
|
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
31  | 
    )
 | 
32  | 
||
| 
4509.3.38
by Martin Pool
 Move reconfigure --stacked-on core code into reconfigure.py  | 
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  | 
||
| 
4509.3.39
by Martin Pool
 Move reconfigure --unstacked to reconfigure.py  | 
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  | 
||
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
73  | 
class Reconfigure(object):  | 
74  | 
||
| 
3983.3.2
by Marius Kruger
 make changes directly in set_repository_trees()  | 
75  | 
def __init__(self, bzrdir, new_bound_location=None):  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
76  | 
self.bzrdir = bzrdir  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
77  | 
self.new_bound_location = new_bound_location  | 
| 
4509.1.1
by Jelmer Vernooij
 Fix for unbound variable in reconfiguring lightweight checkout  | 
78  | 
self.local_repository = None  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
79  | 
try:  | 
| 
2796.2.10
by Aaron Bentley
 Ensure that shared repositories are used where possible  | 
80  | 
self.repository = self.bzrdir.find_repository()  | 
| 
2796.2.7
by Aaron Bentley
 Implement converting a lightweight checkout to a branch  | 
81  | 
except errors.NoRepositoryPresent:  | 
82  | 
self.repository = None  | 
|
| 
4324.2.1
by Jelmer Vernooij
 Make sure class member local_repository of reconfigure is initialized.  | 
83  | 
self.local_repository = None  | 
| 
3311.2.2
by Aaron Bentley
 Flesh out to_sharing  | 
84  | 
else:  | 
85  | 
if (self.repository.bzrdir.root_transport.base ==  | 
|
86  | 
self.bzrdir.root_transport.base):  | 
|
87  | 
self.local_repository = self.repository  | 
|
88  | 
else:  | 
|
89  | 
self.local_repository = None  | 
|
| 
2796.2.7
by Aaron Bentley
 Implement converting a lightweight checkout to a branch  | 
90  | 
try:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
91  | 
branch = self.bzrdir.open_branch()  | 
92  | 
if branch.bzrdir.root_transport.base == bzrdir.root_transport.base:  | 
|
93  | 
self.local_branch = branch  | 
|
94  | 
self.referenced_branch = None  | 
|
95  | 
else:  | 
|
96  | 
self.local_branch = None  | 
|
97  | 
self.referenced_branch = branch  | 
|
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
98  | 
except errors.NotBranchError:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
99  | 
self.local_branch = None  | 
| 
2796.2.9
by Aaron Bentley
 Ensure conversion from lightweight checkout works  | 
100  | 
self.referenced_branch = None  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
101  | 
try:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
102  | 
self.tree = bzrdir.open_workingtree()  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
103  | 
except errors.NoWorkingTree:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
104  | 
self.tree = None  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
105  | 
self._unbind = False  | 
106  | 
self._bind = False  | 
|
107  | 
self._destroy_reference = False  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
108  | 
self._create_reference = False  | 
109  | 
self._destroy_branch = False  | 
|
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
110  | 
self._create_branch = False  | 
111  | 
self._destroy_tree = False  | 
|
112  | 
self._create_tree = False  | 
|
113  | 
self._create_repository = False  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
114  | 
self._destroy_repository = False  | 
| 
3983.3.7
by Marius Kruger
 apply changes in apply again  | 
115  | 
self._repository_trees = None  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
116  | 
|
117  | 
    @staticmethod
 | 
|
118  | 
def to_branch(bzrdir):  | 
|
| 
2796.2.16
by Aaron Bentley
 Documentation updates from review  | 
119  | 
"""Return a Reconfiguration to convert this bzrdir into a branch  | 
120  | 
||
121  | 
        :param bzrdir: The bzrdir to reconfigure
 | 
|
122  | 
        :raise errors.AlreadyBranch: if bzrdir is already a branch
 | 
|
123  | 
        """
 | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
124  | 
reconfiguration = Reconfigure(bzrdir)  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
125  | 
reconfiguration._plan_changes(want_tree=False, want_branch=True,  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
126  | 
want_bound=False, want_reference=False)  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
127  | 
if not reconfiguration.changes_planned():  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
128  | 
raise errors.AlreadyBranch(bzrdir)  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
129  | 
return reconfiguration  | 
130  | 
||
131  | 
    @staticmethod
 | 
|
132  | 
def to_tree(bzrdir):  | 
|
| 
2796.2.16
by Aaron Bentley
 Documentation updates from review  | 
133  | 
"""Return a Reconfiguration to convert this bzrdir into a tree  | 
134  | 
||
135  | 
        :param bzrdir: The bzrdir to reconfigure
 | 
|
136  | 
        :raise errors.AlreadyTree: if bzrdir is already a tree
 | 
|
137  | 
        """
 | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
138  | 
reconfiguration = Reconfigure(bzrdir)  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
139  | 
reconfiguration._plan_changes(want_tree=True, want_branch=True,  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
140  | 
want_bound=False, want_reference=False)  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
141  | 
if not reconfiguration.changes_planned():  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
142  | 
raise errors.AlreadyTree(bzrdir)  | 
143  | 
return reconfiguration  | 
|
144  | 
||
145  | 
    @staticmethod
 | 
|
146  | 
def to_checkout(bzrdir, bound_location=None):  | 
|
| 
2796.2.16
by Aaron Bentley
 Documentation updates from review  | 
147  | 
"""Return a Reconfiguration to convert this bzrdir into a checkout  | 
148  | 
||
149  | 
        :param bzrdir: The bzrdir to reconfigure
 | 
|
150  | 
        :param bound_location: The location the checkout should be bound to.
 | 
|
151  | 
        :raise errors.AlreadyCheckout: if bzrdir is already a checkout
 | 
|
152  | 
        """
 | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
153  | 
reconfiguration = Reconfigure(bzrdir, bound_location)  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
154  | 
reconfiguration._plan_changes(want_tree=True, want_branch=True,  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
155  | 
want_bound=True, want_reference=False)  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
156  | 
if not reconfiguration.changes_planned():  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
157  | 
raise errors.AlreadyCheckout(bzrdir)  | 
158  | 
return reconfiguration  | 
|
159  | 
||
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
160  | 
    @classmethod
 | 
161  | 
def to_lightweight_checkout(klass, bzrdir, reference_location=None):  | 
|
162  | 
"""Make a Reconfiguration to convert bzrdir into a lightweight checkout  | 
|
163  | 
||
164  | 
        :param bzrdir: The bzrdir to reconfigure
 | 
|
165  | 
        :param bound_location: The location the checkout should be bound to.
 | 
|
166  | 
        :raise errors.AlreadyLightweightCheckout: if bzrdir is already a
 | 
|
167  | 
            lightweight checkout
 | 
|
168  | 
        """
 | 
|
169  | 
reconfiguration = klass(bzrdir, reference_location)  | 
|
170  | 
reconfiguration._plan_changes(want_tree=True, want_branch=False,  | 
|
171  | 
want_bound=False, want_reference=True)  | 
|
172  | 
if not reconfiguration.changes_planned():  | 
|
173  | 
raise errors.AlreadyLightweightCheckout(bzrdir)  | 
|
174  | 
return reconfiguration  | 
|
175  | 
||
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
176  | 
    @classmethod
 | 
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
177  | 
def to_use_shared(klass, bzrdir):  | 
178  | 
"""Convert a standalone branch into a repository branch"""  | 
|
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
179  | 
reconfiguration = klass(bzrdir)  | 
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
180  | 
reconfiguration._set_use_shared(use_shared=True)  | 
| 
3311.2.2
by Aaron Bentley
 Flesh out to_sharing  | 
181  | 
if not reconfiguration.changes_planned():  | 
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
182  | 
raise errors.AlreadyUsingShared(bzrdir)  | 
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
183  | 
return reconfiguration  | 
184  | 
||
| 
3311.2.4
by Aaron Bentley
 Implement conversion to standalone  | 
185  | 
    @classmethod
 | 
186  | 
def to_standalone(klass, bzrdir):  | 
|
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
187  | 
"""Convert a repository branch into a standalone branch"""  | 
| 
3311.2.4
by Aaron Bentley
 Implement conversion to standalone  | 
188  | 
reconfiguration = klass(bzrdir)  | 
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
189  | 
reconfiguration._set_use_shared(use_shared=False)  | 
| 
3311.2.4
by Aaron Bentley
 Implement conversion to standalone  | 
190  | 
if not reconfiguration.changes_planned():  | 
191  | 
raise errors.AlreadyStandalone(bzrdir)  | 
|
192  | 
return reconfiguration  | 
|
193  | 
||
| 
3921.4.2
by Matthew Fuller
 Add support in Reconfigure for manipulating the repository setting for  | 
194  | 
    @classmethod
 | 
195  | 
def set_repository_trees(klass, bzrdir, with_trees):  | 
|
| 
3983.3.2
by Marius Kruger
 make changes directly in set_repository_trees()  | 
196  | 
"""Adjust a repository's working tree presence default"""  | 
197  | 
reconfiguration = klass(bzrdir)  | 
|
| 
3921.4.10
by Matthew Fuller
 Stop trying to use _plan_changes() wholesale and just move all the  | 
198  | 
if not reconfiguration.repository.is_shared():  | 
199  | 
raise errors.ReconfigurationNotSupported(reconfiguration.bzrdir)  | 
|
| 
3983.3.2
by Marius Kruger
 make changes directly in set_repository_trees()  | 
200  | 
if with_trees and reconfiguration.repository.make_working_trees():  | 
201  | 
raise errors.AlreadyWithTrees(bzrdir)  | 
|
| 
3983.3.11
by Vincent Ladeuil
 Fix indentation as per Aaron's review and then some.  | 
202  | 
elif (not with_trees  | 
203  | 
and not reconfiguration.repository.make_working_trees()):  | 
|
| 
3983.3.2
by Marius Kruger
 make changes directly in set_repository_trees()  | 
204  | 
raise errors.AlreadyWithNoTrees(bzrdir)  | 
205  | 
else:  | 
|
| 
3983.3.7
by Marius Kruger
 apply changes in apply again  | 
206  | 
reconfiguration._repository_trees = with_trees  | 
| 
3921.4.2
by Matthew Fuller
 Add support in Reconfigure for manipulating the repository setting for  | 
207  | 
return reconfiguration  | 
208  | 
||
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
209  | 
def _plan_changes(self, want_tree, want_branch, want_bound,  | 
| 
3921.4.9
by Matthew Fuller
 Back out _plan_changes() changes for trees frobbing. It's way more  | 
210  | 
want_reference):  | 
| 
2796.2.10
by Aaron Bentley
 Ensure that shared repositories are used where possible  | 
211  | 
"""Determine which changes are needed to assume the configuration"""  | 
| 
3921.4.9
by Matthew Fuller
 Back out _plan_changes() changes for trees frobbing. It's way more  | 
212  | 
if not want_branch and not want_reference:  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
213  | 
raise errors.ReconfigurationNotSupported(self.bzrdir)  | 
214  | 
if want_branch and want_reference:  | 
|
215  | 
raise errors.ReconfigurationNotSupported(self.bzrdir)  | 
|
| 
2796.2.7
by Aaron Bentley
 Implement converting a lightweight checkout to a branch  | 
216  | 
if self.repository is None:  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
217  | 
if not want_reference:  | 
218  | 
self._create_repository = True  | 
|
219  | 
else:  | 
|
220  | 
if want_reference and (self.repository.bzrdir.root_transport.base  | 
|
221  | 
== self.bzrdir.root_transport.base):  | 
|
| 
2796.2.25
by Aaron Bentley
 Avoid destroying shared repositories  | 
222  | 
if not self.repository.is_shared():  | 
223  | 
self._destroy_repository = True  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
224  | 
if self.referenced_branch is None:  | 
225  | 
if want_reference:  | 
|
226  | 
self._create_reference = True  | 
|
| 
2796.2.31
by Aaron Bentley
 Fetch tags to reference branch when converting to checkout  | 
227  | 
if self.local_branch is not None:  | 
228  | 
self._destroy_branch = True  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
229  | 
else:  | 
230  | 
if not want_reference:  | 
|
231  | 
self._destroy_reference = True  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
232  | 
if self.local_branch is None:  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
233  | 
if want_branch is True:  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
234  | 
self._create_branch = True  | 
235  | 
if want_bound:  | 
|
236  | 
self._bind = True  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
237  | 
else:  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
238  | 
if want_bound:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
239  | 
if self.local_branch.get_bound_location() is None:  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
240  | 
self._bind = True  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
241  | 
else:  | 
242  | 
if self.local_branch.get_bound_location() is not None:  | 
|
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
243  | 
self._unbind = True  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
244  | 
if not want_tree and self.tree is not None:  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
245  | 
self._destroy_tree = True  | 
| 
2796.2.15
by Aaron Bentley
 More updates from review  | 
246  | 
if want_tree and self.tree is None:  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
247  | 
self._create_tree = True  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
248  | 
|
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
249  | 
def _set_use_shared(self, use_shared=None):  | 
250  | 
if use_shared is None:  | 
|
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
251  | 
            return
 | 
| 
3311.2.6
by Aaron Bentley
 rename 'sharing' to 'use-shared'  | 
252  | 
if use_shared:  | 
| 
3311.2.2
by Aaron Bentley
 Flesh out to_sharing  | 
253  | 
if self.local_repository is not None:  | 
254  | 
self._destroy_repository = True  | 
|
| 
3311.2.4
by Aaron Bentley
 Implement conversion to standalone  | 
255  | 
else:  | 
256  | 
if self.local_repository is None:  | 
|
257  | 
self._create_repository = True  | 
|
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
258  | 
|
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
259  | 
def changes_planned(self):  | 
| 
2796.2.11
by Aaron Bentley
 Cleanups  | 
260  | 
"""Return True if changes are planned, False otherwise"""  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
261  | 
return (self._unbind or self._bind or self._destroy_tree  | 
262  | 
or self._create_tree or self._destroy_reference  | 
|
| 
2796.2.26
by Aaron Bentley
 Support converting standalone tree to lightweight checkout  | 
263  | 
or self._create_branch or self._create_repository  | 
| 
3983.3.5
by Marius Kruger
 put bracket back where we found it  | 
264  | 
or self._create_reference or self._destroy_repository)  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
265  | 
|
266  | 
def _check(self):  | 
|
| 
2796.2.11
by Aaron Bentley
 Cleanups  | 
267  | 
"""Raise if reconfiguration would destroy local changes"""  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
268  | 
if self._destroy_tree:  | 
| 
4503.1.2
by Vincent Ladeuil
 Use tree.has_changes() where appropriate (the test suite caught a  | 
269  | 
            # XXX: What about pending merges ? -- vila 20090629
 | 
270  | 
if self.tree.has_changes(self.tree.basis_tree()):  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
271  | 
raise errors.UncommittedChanges(self.tree)  | 
| 
3338.1.1
by Aaron Bentley
 Raise an error when converting a branch to a lightweight checkout loses data  | 
272  | 
if self._create_reference and self.local_branch is not None:  | 
273  | 
reference_branch = branch.Branch.open(self._select_bind_location())  | 
|
274  | 
if (reference_branch.last_revision() !=  | 
|
275  | 
self.local_branch.last_revision()):  | 
|
276  | 
raise errors.UnsyncedBranches(self.bzrdir, reference_branch)  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
277  | 
|
278  | 
def _select_bind_location(self):  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
279  | 
"""Select a location to bind or create a reference to.  | 
| 
2796.2.11
by Aaron Bentley
 Cleanups  | 
280  | 
|
281  | 
        Preference is:
 | 
|
282  | 
        1. user specified location
 | 
|
283  | 
        2. branch reference location (it's a kind of bind location)
 | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
284  | 
        3. current bind location
 | 
285  | 
        4. previous bind location (it was a good choice once)
 | 
|
286  | 
        5. push location (it's writeable, so committable)
 | 
|
287  | 
        6. parent location (it's pullable, so update-from-able)
 | 
|
| 
2796.2.11
by Aaron Bentley
 Cleanups  | 
288  | 
        """
 | 
289  | 
if self.new_bound_location is not None:  | 
|
290  | 
return self.new_bound_location  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
291  | 
if self.local_branch is not None:  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
292  | 
bound = self.local_branch.get_bound_location()  | 
293  | 
if bound is not None:  | 
|
294  | 
return bound  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
295  | 
old_bound = self.local_branch.get_old_bound_location()  | 
296  | 
if old_bound is not None:  | 
|
297  | 
return old_bound  | 
|
298  | 
push_location = self.local_branch.get_push_location()  | 
|
299  | 
if push_location is not None:  | 
|
300  | 
return push_location  | 
|
301  | 
parent = self.local_branch.get_parent()  | 
|
302  | 
if parent is not None:  | 
|
303  | 
return parent  | 
|
| 
2796.2.9
by Aaron Bentley
 Ensure conversion from lightweight checkout works  | 
304  | 
elif self.referenced_branch is not None:  | 
305  | 
return self.referenced_branch.base  | 
|
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
306  | 
raise errors.NoBindLocation(self.bzrdir)  | 
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
307  | 
|
308  | 
def apply(self, force=False):  | 
|
| 
2796.2.16
by Aaron Bentley
 Documentation updates from review  | 
309  | 
"""Apply the reconfiguration  | 
310  | 
||
311  | 
        :param force: If true, the reconfiguration is applied even if it will
 | 
|
312  | 
            destroy local changes.
 | 
|
313  | 
        :raise errors.UncommittedChanges: if the local tree is to be destroyed
 | 
|
314  | 
            but contains uncommitted changes.
 | 
|
315  | 
        :raise errors.NoBindLocation: if no bind location was specified and
 | 
|
316  | 
            none could be autodetected.
 | 
|
317  | 
        """
 | 
|
| 
2796.2.1
by Aaron Bentley
 Begin work on reconfigure command  | 
318  | 
if not force:  | 
319  | 
self._check()  | 
|
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
320  | 
if self._create_repository:  | 
| 
4297.4.5
by Martin von Gagern
 Use repository format from exactly the same repository we want to fetch from.  | 
321  | 
if self.local_branch and not self._destroy_branch:  | 
322  | 
old_repo = self.local_branch.repository  | 
|
323  | 
elif self._create_branch and self.referenced_branch is not None:  | 
|
324  | 
old_repo = self.referenced_branch.repository  | 
|
325  | 
else:  | 
|
326  | 
old_repo = None  | 
|
327  | 
if old_repo is not None:  | 
|
328  | 
repository_format = old_repo._format  | 
|
329  | 
else:  | 
|
330  | 
repository_format = None  | 
|
| 
4297.4.3
by Martin von Gagern
 Cleaner implementation of reconfigure.  | 
331  | 
if repository_format is not None:  | 
332  | 
repo = repository_format.initialize(self.bzrdir)  | 
|
333  | 
else:  | 
|
334  | 
repo = self.bzrdir.create_repository()  | 
|
| 
3311.2.4
by Aaron Bentley
 Implement conversion to standalone  | 
335  | 
if self.local_branch and not self._destroy_branch:  | 
336  | 
repo.fetch(self.local_branch.repository,  | 
|
337  | 
self.local_branch.last_revision())  | 
|
| 
2796.2.10
by Aaron Bentley
 Ensure that shared repositories are used where possible  | 
338  | 
else:  | 
339  | 
repo = self.repository  | 
|
| 
2796.2.23
by Aaron Bentley
 Add support for reconfiguring repositories into branches or trees  | 
340  | 
if self._create_branch and self.referenced_branch is not None:  | 
| 
2796.2.10
by Aaron Bentley
 Ensure that shared repositories are used where possible  | 
341  | 
repo.fetch(self.referenced_branch.repository,  | 
342  | 
self.referenced_branch.last_revision())  | 
|
| 
2796.2.30
by Aaron Bentley
 Reconfigure can safely be interrupted while fetching (#179316)  | 
343  | 
if self._create_reference:  | 
344  | 
reference_branch = branch.Branch.open(self._select_bind_location())  | 
|
345  | 
if self._destroy_repository:  | 
|
346  | 
if self._create_reference:  | 
|
347  | 
reference_branch.repository.fetch(self.repository)  | 
|
| 
3311.2.1
by Aaron Bentley
 Initial make-sharing functionality  | 
348  | 
elif self.local_branch is not None and not self._destroy_branch:  | 
349  | 
up = self.local_branch.bzrdir.root_transport.clone('..')  | 
|
350  | 
up_bzrdir = bzrdir.BzrDir.open_containing_from_transport(up)[0]  | 
|
351  | 
new_repo = up_bzrdir.find_repository()  | 
|
352  | 
new_repo.fetch(self.repository)  | 
|
| 
2796.2.23
by Aaron Bentley
 Add support for reconfiguring repositories into branches or trees  | 
353  | 
last_revision_info = None  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
354  | 
if self._destroy_reference:  | 
| 
2796.2.23
by Aaron Bentley
 Add support for reconfiguring repositories into branches or trees  | 
355  | 
last_revision_info = self.referenced_branch.last_revision_info()  | 
| 
2796.2.7
by Aaron Bentley
 Implement converting a lightweight checkout to a branch  | 
356  | 
self.bzrdir.destroy_branch()  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
357  | 
if self._destroy_branch:  | 
| 
2796.2.23
by Aaron Bentley
 Add support for reconfiguring repositories into branches or trees  | 
358  | 
last_revision_info = self.local_branch.last_revision_info()  | 
| 
2796.2.31
by Aaron Bentley
 Fetch tags to reference branch when converting to checkout  | 
359  | 
if self._create_reference:  | 
360  | 
self.local_branch.tags.merge_to(reference_branch.tags)  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
361  | 
self.bzrdir.destroy_branch()  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
362  | 
if self._create_branch:  | 
| 
2796.2.9
by Aaron Bentley
 Ensure conversion from lightweight checkout works  | 
363  | 
local_branch = self.bzrdir.create_branch()  | 
| 
2796.2.23
by Aaron Bentley
 Add support for reconfiguring repositories into branches or trees  | 
364  | 
if last_revision_info is not None:  | 
365  | 
local_branch.set_last_revision_info(*last_revision_info)  | 
|
| 
2796.2.32
by Aaron Bentley
 Preserve tags converting from lightweight checkouts  | 
366  | 
if self._destroy_reference:  | 
367  | 
self.referenced_branch.tags.merge_to(local_branch.tags)  | 
|
| 
4273.1.18
by Aaron Bentley
 Reconfigure preserves reference locations.  | 
368  | 
self.referenced_branch.update_references(local_branch)  | 
| 
2796.2.9
by Aaron Bentley
 Ensure conversion from lightweight checkout works  | 
369  | 
else:  | 
370  | 
local_branch = self.local_branch  | 
|
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
371  | 
if self._create_reference:  | 
372  | 
format = branch.BranchReferenceFormat().initialize(self.bzrdir,  | 
|
373  | 
reference_branch)  | 
|
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
374  | 
if self._destroy_tree:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
375  | 
self.bzrdir.destroy_workingtree()  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
376  | 
if self._create_tree:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
377  | 
self.bzrdir.create_workingtree()  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
378  | 
if self._unbind:  | 
| 
2796.2.3
by Aaron Bentley
 Implement conversion to tree and checkout  | 
379  | 
self.local_branch.unbind()  | 
| 
2796.2.14
by Aaron Bentley
 Updates from review  | 
380  | 
if self._bind:  | 
| 
2796.2.11
by Aaron Bentley
 Cleanups  | 
381  | 
bind_location = self._select_bind_location()  | 
| 
2796.2.9
by Aaron Bentley
 Ensure conversion from lightweight checkout works  | 
382  | 
local_branch.bind(branch.Branch.open(bind_location))  | 
| 
2796.2.19
by Aaron Bentley
 Support reconfigure --lightweight-checkout  | 
383  | 
if self._destroy_repository:  | 
384  | 
self.bzrdir.destroy_repository()  | 
|
| 
3983.3.7
by Marius Kruger
 apply changes in apply again  | 
385  | 
if self._repository_trees is not None:  | 
386  | 
repo.set_make_working_trees(self._repository_trees)  |