~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree_4.py

factor out WorkingTree4._directory_is_tree_reference

Show diffs side-by-side

added added

removed removed

Lines of Context:
223
223
    def _comparison_data(self, entry, path):
224
224
        kind, executable, stat_value = \
225
225
            WorkingTree3._comparison_data(self, entry, path)
226
 
        # it looks like a plain directory, but it's really a reference
227
 
        if kind == 'directory' and entry.kind == 'tree-reference':
 
226
        # it looks like a plain directory, but it's really a reference -- see
 
227
        # also kind()
 
228
        if kind == 'directory' and self._directory_is_tree_reference(path):
228
229
            kind = 'tree-reference'
229
230
        return kind, executable, stat_value
230
231
 
259
260
        self._dirstate = dirstate.DirState.on_file(local_path)
260
261
        return self._dirstate
261
262
 
 
263
    def _directory_is_tree_reference(self, relpath):
 
264
        # as a special case, if a directory contains control files then 
 
265
        # it's a tree reference, except that the root of the tree is not
 
266
        return relpath and osutils.isdir(self.abspath(relpath) + "/.bzr")
 
267
        # TODO: We could ask all the control formats whether they
 
268
        # recognize this directory, but at the moment there's no cheap api
 
269
        # to do that.  Since we probably can only nest bzr checkouts and
 
270
        # they always use this name it's ok for now.  -- mbp 20060306
 
271
        #
 
272
        # FIXME: There is an unhandled case here of a subdirectory
 
273
        # containing .bzr but not a branch; that will probably blow up
 
274
        # when you try to commit it.  It might happen if there is a
 
275
        # checkout in a subdirectory.  This can be avoided by not adding
 
276
        # it.  mbp 20070306
 
277
 
262
278
    def filter_unversioned_files(self, paths):
263
279
        """Filter out paths that are versioned.
264
280
 
464
480
            "path for id {%s} is None!" % file_id
465
481
        abspath = self.abspath(relpath)
466
482
        kind = file_kind(abspath)
467
 
        if kind == 'directory' and relpath != '':
468
 
            # as a special case, if a directory contains control files then 
469
 
            # it's a tree reference, except that the root of the tree is not
470
 
            if osutils.isdir(abspath + "/.bzr"):
471
 
                kind = 'tree-reference'
472
 
            # TODO: We could ask all the control formats whether they
473
 
            # recognize this directory, but at the moment there's no cheap api
474
 
            # to do that.  Since we probably can only nest bzr checkouts and
475
 
            # they always use this name it's ok for now.  -- mbp 20060306
476
 
            #
477
 
            # FIXME: There is an unhandled case here of a subdirectory
478
 
            # containing .bzr but not a branch; that will probably blow up
479
 
            # when you try to commit it.  It might happen if there is a
480
 
            # checkout in a subdirectory.  This can be avoided by not adding
481
 
            # it.  mbp 20070306
 
483
        if kind == 'directory' and self._directory_is_tree_reference(relpath):
 
484
            kind = 'tree-reference'
482
485
        return kind
483
486
 
484
487
    @needs_read_lock