~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/controldir.py

  • Committer: Jelmer Vernooij
  • Date: 2010-08-20 13:44:51 UTC
  • mto: This revision was merged to the branch mainline in revision 5389.
  • Revision ID: jelmer@samba.org-20100820134451-cqkca8s1vxpo6iqr
Switch naming in a couple more places.

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
class ControlComponent(object):
51
51
    """Abstract base class for control directory components.
52
52
 
53
 
    This provides interfaces that are common across bzrdirs,
 
53
    This provides interfaces that are common across controldirs,
54
54
    repositories, branches, and workingtree control directories.
55
55
 
56
56
    They all expose two urls and transports: the *user* URL is the
84
84
    """A control directory."""
85
85
 
86
86
    def can_convert_format(self):
87
 
        """Return true if this bzrdir is one whose format we can convert from."""
 
87
        """Return true if this controldir is one whose format we can convert
 
88
        from."""
88
89
        return True
89
90
 
90
91
    def list_branches(self):
97
98
            return []
98
99
 
99
100
    def is_control_filename(self, filename):
100
 
        """True if filename is the name of a path which is reserved for bzrdir's.
 
101
        """True if filename is the name of a path which is reserved for
 
102
        controldirs.
101
103
 
102
 
        :param filename: A filename within the root transport of this bzrdir.
 
104
        :param filename: A filename within the root transport of this
 
105
            controldir.
103
106
 
104
107
        This is true IF and ONLY IF the filename is part of the namespace reserved
105
108
        for bzr control dirs. Currently this is the '.bzr' directory in the root
110
113
        raise NotImplementedError(self.is_control_filename)
111
114
 
112
115
    def needs_format_conversion(self, format=None):
113
 
        """Return true if this bzrdir needs convert_format run on it.
 
116
        """Return true if this controldir needs convert_format run on it.
114
117
 
115
118
        For instance, if the repository format is out of date but the
116
119
        branch and working tree are not, this should return True.
121
124
        raise NotImplementedError(self.needs_format_conversion)
122
125
 
123
126
    def destroy_repository(self):
124
 
        """Destroy the repository in this BzrDir"""
 
127
        """Destroy the repository in this ControlDir."""
125
128
        raise NotImplementedError(self.destroy_repository)
126
129
 
127
130
    def create_branch(self, name=None):
128
 
        """Create a branch in this BzrDir.
 
131
        """Create a branch in this ControlDir.
129
132
 
130
133
        :param name: Name of the colocated branch to create, None for
131
134
            the default branch.
132
135
 
133
 
        The bzrdir's format will control what branch format is created.
134
 
        For more control see BranchFormatXX.create(a_bzrdir).
 
136
        The controldirs format will control what branch format is created.
 
137
        For more control see BranchFormatXX.create(a_controldir).
135
138
        """
136
139
        raise NotImplementedError(self.create_branch)
137
140
 
138
141
    def destroy_branch(self, name=None):
139
 
        """Destroy a branch in this BzrDir.
 
142
        """Destroy a branch in this ControlDir.
140
143
 
141
144
        :param name: Name of the branch to destroy, None for the default 
142
145
            branch.
145
148
 
146
149
    def create_workingtree(self, revision_id=None, from_branch=None,
147
150
        accelerator_tree=None, hardlink=False):
148
 
        """Create a working tree at this BzrDir.
 
151
        """Create a working tree at this ControlDir.
149
152
 
150
153
        :param revision_id: create it as of this revision id.
151
 
        :param from_branch: override bzrdir branch (for lightweight checkouts)
 
154
        :param from_branch: override controldir branch (for lightweight
 
155
            checkouts)
152
156
        :param accelerator_tree: A tree which can be used for retrieving file
153
157
            contents more quickly than the revision tree, i.e. a workingtree.
154
158
            The revision tree will be used for cases where accelerator_tree's
157
161
        raise NotImplementedError(self.create_workingtree)
158
162
 
159
163
    def destroy_workingtree(self):
160
 
        """Destroy the working tree at this BzrDir.
 
164
        """Destroy the working tree at this ControlDir.
161
165
 
162
166
        Formats that do not support this may raise UnsupportedOperation.
163
167
        """
164
168
        raise NotImplementedError(self.destroy_workingtree)
165
169
 
166
170
    def destroy_workingtree_metadata(self):
167
 
        """Destroy the control files for the working tree at this BzrDir.
 
171
        """Destroy the control files for the working tree at this ControlDir.
168
172
 
169
173
        The contents of working tree files are not affected.
170
174
        Formats that do not support this may raise UnsupportedOperation.
172
176
        raise NotImplementedError(self.destroy_workingtree_metadata)
173
177
 
174
178
    def get_branch_reference(self, name=None):
175
 
        """Return the referenced URL for the branch in this bzrdir.
 
179
        """Return the referenced URL for the branch in this controldir.
176
180
 
177
181
        :param name: Optional colocated branch name
178
182
        :raises NotBranchError: If there is no Branch.
179
183
        :raises NoColocatedBranchSupport: If a branch name was specified
180
184
            but colocated branches are not supported.
181
 
        :return: The URL the branch in this bzrdir references if it is a
 
185
        :return: The URL the branch in this controldir references if it is a
182
186
            reference branch, or None for regular branches.
183
187
        """
184
188
        if name is not None:
186
190
        return None
187
191
 
188
192
    def get_branch_transport(self, branch_format, name=None):
189
 
        """Get the transport for use by branch format in this BzrDir.
 
193
        """Get the transport for use by branch format in this ControlDir.
190
194
 
191
195
        Note that bzr dirs that do not support format strings will raise
192
196
        IncompatibleFormat if the branch format they are given has
199
203
        raise NotImplementedError(self.get_branch_transport)
200
204
 
201
205
    def get_repository_transport(self, repository_format):
202
 
        """Get the transport for use by repository format in this BzrDir.
 
206
        """Get the transport for use by repository format in this ControlDir.
203
207
 
204
208
        Note that bzr dirs that do not support format strings will raise
205
209
        IncompatibleFormat if the repository format they are given has
212
216
        raise NotImplementedError(self.get_repository_transport)
213
217
 
214
218
    def get_workingtree_transport(self, tree_format):
215
 
        """Get the transport for use by workingtree format in this BzrDir.
 
219
        """Get the transport for use by workingtree format in this ControlDir.
216
220
 
217
221
        Note that bzr dirs that do not support format strings will raise
218
222
        IncompatibleFormat if the workingtree format they are given has a
226
230
 
227
231
    def open_branch(self, name=None, unsupported=False,
228
232
                    ignore_fallbacks=False):
229
 
        """Open the branch object at this BzrDir if one is present.
 
233
        """Open the branch object at this ControlDir if one is present.
230
234
 
231
235
        If unsupported is True, then no longer supported branch formats can
232
236
        still be opened.
236
240
        raise NotImplementedError(self.open_branch)
237
241
 
238
242
    def open_repository(self, _unsupported=False):
239
 
        """Open the repository object at this BzrDir if one is present.
 
243
        """Open the repository object at this ControlDir if one is present.
240
244
 
241
245
        This will not follow the Branch object pointer - it's strictly a direct
242
246
        open facility. Most client code should use open_branch().repository to
258
262
 
259
263
    def open_workingtree(self, _unsupported=False,
260
264
                         recommend_upgrade=True, from_branch=None):
261
 
        """Open the workingtree object at this BzrDir if one is present.
 
265
        """Open the workingtree object at this ControlDir if one is present.
262
266
 
263
267
        :param recommend_upgrade: Optional keyword parameter, when True (the
264
268
            default), emit through the ui module a recommendation that the user
265
269
            upgrade the working tree when the workingtree being opened is old
266
270
            (but still fully supported).
267
 
        :param from_branch: override bzrdir branch (for lightweight checkouts)
 
271
        :param from_branch: override controldir branch (for lightweight
 
272
            checkouts)
268
273
        """
269
274
        raise NotImplementedError(self.open_workingtree)
270
275
 
271
276
    def has_branch(self, name=None):
272
 
        """Tell if this bzrdir contains a branch.
 
277
        """Tell if this controldir contains a branch.
273
278
 
274
279
        Note: if you're going to open the branch, you should just go ahead
275
280
        and try, and not ask permission first.  (This method just opens the
282
287
            return False
283
288
 
284
289
    def has_workingtree(self):
285
 
        """Tell if this bzrdir contains a working tree.
 
290
        """Tell if this controldir contains a working tree.
286
291
 
287
 
        This will still raise an exception if the bzrdir has a workingtree that
288
 
        is remote & inaccessible.
 
292
        This will still raise an exception if the controldir has a workingtree
 
293
        that is remote & inaccessible.
289
294
 
290
295
        Note: if you're going to open the working tree, you should just go ahead
291
296
        and try, and not ask permission first.  (This method just opens the
306
311
 
307
312
        :require_stacking: If True, non-stackable formats will be upgraded
308
313
            to similar stackable formats.
309
 
        :returns: a BzrDirFormat with all component formats either set
 
314
        :returns: a ControlDirFormat with all component formats either set
310
315
            appropriately or set to None if that component should not be
311
316
            created.
312
317
        """
320
325
               recurse='down', possible_transports=None,
321
326
               accelerator_tree=None, hardlink=False, stacked=False,
322
327
               source_branch=None, create_tree_if_local=True):
323
 
        """Create a copy of this bzrdir prepared for use as a new line of
 
328
        """Create a copy of this controldir prepared for use as a new line of
324
329
        development.
325
330
 
326
331
        If url's last component does not exist, it will be created.
385
390
                result_repo.fetch(source_repository, fetch_spec=fetch_spec)
386
391
 
387
392
        if source_branch is None:
388
 
            # this is for sprouting a bzrdir without a branch; is that
 
393
            # this is for sprouting a controldir without a branch; is that
389
394
            # actually useful?
390
395
            # Not especially, but it's part of the contract.
391
396
            result_branch = result.create_branch()
442
447
 
443
448
    def push_branch(self, source, revision_id=None, overwrite=False, 
444
449
        remember=False, create_prefix=False):
445
 
        """Push the source branch into this BzrDir."""
 
450
        """Push the source branch into this ControlDir."""
446
451
        br_to = None
447
452
        # If we can open a branch, use its direct repository, otherwise see
448
453
        # if there is a repository without a branch.
510
515
     * an open routine.
511
516
 
512
517
    Formats are placed in a dict by their format string for reference
513
 
    during bzrdir opening. These should be subclasses of BzrDirFormat
 
518
    during controldir opening. These should be subclasses of ControlDirFormat
514
519
    for consistency.
515
520
 
516
521
    Once a format is deprecated, just deprecate the initialize and open
550
555
        raise NotImplementedError(self.get_format_description)
551
556
 
552
557
    def get_converter(self, format=None):
553
 
        """Return the converter to use to convert bzrdirs needing converts.
 
558
        """Return the converter to use to convert controldirs needing converts.
554
559
 
555
 
        This returns a bzrlib.bzrdir.Converter object.
 
560
        This returns a bzrlib.controldir.Converter object.
556
561
 
557
562
        This should return the best upgrader to step this format towards the
558
563
        current default format. In the case of plugins we can/should provide
651
656
        return self.initialize_on_transport(get_transport(url,
652
657
                                                          possible_transports))
653
658
    def initialize_on_transport(self, transport):
654
 
        """Initialize a new bzrdir in the base directory of a Transport."""
 
659
        """Initialize a new controldir in the base directory of a Transport."""
655
660
        raise NotImplementedError(self.initialize_on_transport)
656
661
 
657
662
    def initialize_on_transport_ex(self, transport, use_existing_dir=False,
681
686
        :param shared_repo: Control whether made repositories are shared or
682
687
            not.
683
688
        :param vfs_only: If True do not attempt to use a smart server
684
 
        :return: repo, bzrdir, require_stacking, repository_policy. repo is
685
 
            None if none was created or found, bzrdir is always valid.
 
689
        :return: repo, controldir, require_stacking, repository_policy. repo is
 
690
            None if none was created or found, controldir is always valid.
686
691
            require_stacking is the result of examining the stacked_on
687
692
            parameter and any stacking policy found for the target.
688
693
        """
734
739
        raise NotImplementedError(self.probe_transport)
735
740
 
736
741
 
737
 
class BzrDirFormatInfo(object):
 
742
class ControlDirFormatInfo(object):
738
743
 
739
744
    def __init__(self, native, deprecated, hidden, experimental):
740
745
        self.deprecated = deprecated
744
749
 
745
750
 
746
751
class ControlDirFormatRegistry(registry.Registry):
747
 
    """Registry of user-selectable BzrDir subformats.
 
752
    """Registry of user-selectable ControlDir subformats.
748
753
 
749
754
    Differs from ControlDirFormat._formats in that it provides sub-formats,
750
 
    e.g. BzrDirMeta1 with weave repository.  Also, it's more user-oriented.
 
755
    e.g. ControlDirMeta1 with weave repository.  Also, it's more user-oriented.
751
756
    """
752
757
 
753
758
    def __init__(self):
754
 
        """Create a BzrDirFormatRegistry."""
 
759
        """Create a ControlDirFormatRegistry."""
755
760
        self._aliases = set()
756
761
        self._registration_order = list()
757
762
        super(ControlDirFormatRegistry, self).__init__()
762
767
 
763
768
    def register(self, key, factory, help, native=True, deprecated=False,
764
769
                 hidden=False, experimental=False, alias=False):
765
 
        """Register a BzrDirFormat factory.
 
770
        """Register a ControlDirFormat factory.
766
771
 
767
772
        The factory must be a callable that takes one parameter: the key.
768
 
        It must produce an instance of the BzrDirFormat when called.
 
773
        It must produce an instance of the ControlDirFormat when called.
769
774
 
770
775
        This function mainly exists to prevent the info object from being
771
776
        supplied directly.
772
777
        """
773
778
        registry.Registry.register(self, key, factory, help,
774
 
            BzrDirFormatInfo(native, deprecated, hidden, experimental))
 
779
            ControlDirFormatInfo(native, deprecated, hidden, experimental))
775
780
        if alias:
776
781
            self._aliases.add(key)
777
782
        self._registration_order.append(key)
779
784
    def register_lazy(self, key, module_name, member_name, help, native=True,
780
785
        deprecated=False, hidden=False, experimental=False, alias=False):
781
786
        registry.Registry.register_lazy(self, key, module_name, member_name,
782
 
            help, BzrDirFormatInfo(native, deprecated, hidden, experimental))
 
787
            help, ControlDirFormatInfo(native, deprecated, hidden, experimental))
783
788
        if alias:
784
789
            self._aliases.add(key)
785
790
        self._registration_order.append(key)