/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/workingtree.py

Upgraded to the latest bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
 
39
39
from cStringIO import StringIO
40
40
import os
 
41
import sys
41
42
 
42
43
from bzrlib.lazy_import import lazy_import
43
44
lazy_import(globals(), """
68
69
    revisiontree,
69
70
    repository,
70
71
    textui,
 
72
    trace,
71
73
    transform,
 
74
    ui,
72
75
    urlutils,
73
76
    xml5,
74
77
    xml6,
117
120
MERGE_MODIFIED_HEADER_1 = "BZR merge-modified list format 1"
118
121
CONFLICT_HEADER_1 = "BZR conflict list format 1"
119
122
 
 
123
ERROR_PATH_NOT_FOUND = 3    # WindowsError errno code, equivalent to ENOENT
 
124
 
120
125
 
121
126
@deprecated_function(zero_thirteen)
122
127
def gen_file_id(name):
524
529
        return self.abspath(self.id2path(file_id))
525
530
 
526
531
    @needs_read_lock
527
 
    def clone(self, to_bzrdir, revision_id=None, basis=None):
 
532
    def clone(self, to_bzrdir, revision_id=None):
528
533
        """Duplicate this working tree into to_bzr, including all state.
529
534
        
530
535
        Specifically modified files are kept as modified, but
536
541
            If not None, the cloned tree will have its last revision set to 
537
542
            revision, and and difference between the source trees last revision
538
543
            and this one merged in.
539
 
 
540
 
        basis
541
 
            If not None, a closer copy of a tree which may have some files in
542
 
            common, and which file content should be preferentially copied from.
543
544
        """
544
545
        # assumes the target bzr dir format is compatible.
545
546
        result = self._format.initialize(to_bzrdir)
1397
1398
        # prevent race conditions with the lock
1398
1399
        return iter(
1399
1400
            [subp for subp in self.extras() if not self.is_ignored(subp)])
1400
 
    
 
1401
 
1401
1402
    @needs_tree_write_lock
1402
1403
    def unversion(self, file_ids):
1403
1404
        """Remove the file ids in file_ids from the current versioned set.
1603
1604
            mode = stat_value.st_mode
1604
1605
            kind = osutils.file_kind_from_stat_mode(mode)
1605
1606
            if not supports_executable():
1606
 
                executable = entry.executable
 
1607
                executable = entry is not None and entry.executable
1607
1608
            else:
1608
1609
                executable = bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)
1609
1610
        return kind, executable, stat_value
2121
2122
            current_disk = disk_iterator.next()
2122
2123
            disk_finished = False
2123
2124
        except OSError, e:
2124
 
            if e.errno != errno.ENOENT:
 
2125
            if not (e.errno == errno.ENOENT or
 
2126
                (sys.platform == 'win32' and e.errno == ERROR_PATH_NOT_FOUND)):
2125
2127
                raise
2126
2128
            current_disk = None
2127
2129
            disk_finished = True
2267
2269
        self.set_conflicts(un_resolved)
2268
2270
        return un_resolved, resolved
2269
2271
 
 
2272
    def _validate(self):
 
2273
        """Validate internal structures.
 
2274
 
 
2275
        This is meant mostly for the test suite. To give it a chance to detect
 
2276
        corruption after actions have occurred. The default implementation is a
 
2277
        just a no-op.
 
2278
 
 
2279
        :return: None. An exception should be raised if there is an error.
 
2280
        """
 
2281
        return
 
2282
 
2270
2283
 
2271
2284
class WorkingTree2(WorkingTree):
2272
2285
    """This is the Format 2 working tree.
2432
2445
 
2433
2446
    requires_rich_root = False
2434
2447
 
 
2448
    upgrade_recommended = False
 
2449
 
2435
2450
    @classmethod
2436
2451
    def find_format(klass, a_bzrdir):
2437
2452
        """Return the format for the working tree object in a_bzrdir."""
2486
2501
        del klass._formats[format.get_format_string()]
2487
2502
 
2488
2503
 
2489
 
 
2490
2504
class WorkingTreeFormat2(WorkingTreeFormat):
2491
2505
    """The second working tree format. 
2492
2506
 
2493
2507
    This format modified the hash cache from the format 1 hash cache.
2494
2508
    """
2495
2509
 
 
2510
    upgrade_recommended = True
 
2511
 
2496
2512
    def get_format_description(self):
2497
2513
        """See WorkingTreeFormat.get_format_description()."""
2498
2514
        return "Working tree format 2"
2561
2577
            raise NotImplementedError
2562
2578
        if not isinstance(a_bzrdir.transport, LocalTransport):
2563
2579
            raise errors.NotLocalUrl(a_bzrdir.transport.base)
2564
 
        return WorkingTree2(a_bzrdir.root_transport.local_abspath('.'),
 
2580
        wt = WorkingTree2(a_bzrdir.root_transport.local_abspath('.'),
2565
2581
                           _internal=True,
2566
2582
                           _format=self,
2567
2583
                           _bzrdir=a_bzrdir)
2568
 
 
 
2584
        return wt
2569
2585
 
2570
2586
class WorkingTreeFormat3(WorkingTreeFormat):
2571
2587
    """The second working tree format updated to record a format marker.
2578
2594
        - is new in bzr 0.8
2579
2595
        - uses a LockDir to guard access for writes.
2580
2596
    """
 
2597
    
 
2598
    upgrade_recommended = True
2581
2599
 
2582
2600
    def get_format_string(self):
2583
2601
        """See WorkingTreeFormat.get_format_string()."""
2668
2686
            raise NotImplementedError
2669
2687
        if not isinstance(a_bzrdir.transport, LocalTransport):
2670
2688
            raise errors.NotLocalUrl(a_bzrdir.transport.base)
2671
 
        return self._open(a_bzrdir, self._open_control_files(a_bzrdir))
 
2689
        wt = self._open(a_bzrdir, self._open_control_files(a_bzrdir))
 
2690
        return wt
2672
2691
 
2673
2692
    def _open(self, a_bzrdir, control_files):
2674
2693
        """Open the tree itself.