~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

Merge in bzr-dir phase 3, enabling controlled upgrades and shared repositories.

Show diffs side-by-side

added added

removed removed

Lines of Context:
223
223
        assert isinstance(basedir, basestring), \
224
224
            "base directory %r is not a string" % basedir
225
225
        basedir = safe_unicode(basedir)
226
 
        mutter("openeing working tree %r", basedir)
 
226
        mutter("opening working tree %r", basedir)
227
227
        if deprecated_passed(branch):
228
228
            if not _internal:
229
229
                warn("WorkingTree(..., branch=XXX) is deprecated as of bzr 0.8."
276
276
        self._inventory = inv
277
277
        self.path2id = self._inventory.path2id
278
278
 
 
279
    def is_control_filename(self, filename):
 
280
        """True if filename is the name of a control file in this tree.
 
281
        
 
282
        This is true IF and ONLY IF the filename is part of the meta data
 
283
        that bzr controls in this tree. I.E. a random .bzr directory placed
 
284
        on disk will not be a control file for this tree.
 
285
        """
 
286
        try:
 
287
            self.bzrdir.transport.relpath(self.abspath(filename))
 
288
            return True
 
289
        except errors.PathNotChild:
 
290
            return False
 
291
 
279
292
    @staticmethod
280
293
    def open(path=None, _unsupported=False):
281
294
        """Open an existing working tree at path.
516
529
 
517
530
        inv = self.read_working_inventory()
518
531
        for f,file_id in zip(files, ids):
519
 
            if is_control_file(f):
 
532
            if self.is_control_filename(f):
520
533
                raise BzrError("cannot add control file %s" % quotefn(f))
521
534
 
522
535
            fp = splitpath(f)
611
624
                ## TODO: If we find a subdirectory with its own .bzr
612
625
                ## directory, then that is a separate tree and we
613
626
                ## should exclude it.
614
 
                if bzrlib.BZRDIR == f:
 
627
 
 
628
                # the bzrdir for this tree
 
629
                if self.bzrdir.transport.base.endswith(f + '/'):
615
630
                    continue
616
631
 
617
632
                # path within tree
1127
1142
        
1128
1143
        # TODO: split this per format so there is no ugly if block
1129
1144
        if self._hashcache.needs_write and (
 
1145
            # dedicated lock files
1130
1146
            self._control_files._lock_count==1 or 
 
1147
            # shared lock files
1131
1148
            (self._control_files is self.branch.control_files and 
1132
 
             self._control_files._lock_count==2)):
 
1149
             self._control_files._lock_count==3)):
1133
1150
            self._hashcache.write()
1134
1151
        # reverse order of locking.
1135
1152
        result = self._control_files.unlock()
1205
1222
        if path.endswith(suffix):
1206
1223
            return path[:-len(suffix)]
1207
1224
 
 
1225
@deprecated_function(zero_eight)
1208
1226
def is_control_file(filename):
 
1227
    """See WorkingTree.is_control_filename(filename)."""
1209
1228
    ## FIXME: better check
1210
1229
    filename = normpath(filename)
1211
1230
    while filename != '':
1212
1231
        head, tail = os.path.split(filename)
1213
1232
        ## mutter('check %r for control file' % ((head, tail),))
1214
 
        if tail == bzrlib.BZRDIR:
 
1233
        if tail == '.bzr':
1215
1234
            return True
1216
1235
        if filename == head:
1217
1236
            break
1406
1425
                           _format=self,
1407
1426
                           _bzrdir=a_bzrdir)
1408
1427
 
 
1428
    def __str__(self):
 
1429
        return self.get_format_string()
 
1430
 
1409
1431
 
1410
1432
# formats which have no format string are not discoverable
1411
1433
# and not independently creatable, so are not registered.