~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

mergeĀ fromĀ dirstate

Show diffs side-by-side

added added

removed removed

Lines of Context:
460
460
        return osutils.lexists(self.abspath(filename))
461
461
 
462
462
    def get_file(self, file_id):
 
463
        file_id = osutils.safe_file_id(file_id)
463
464
        return self.get_file_byname(self.id2path(file_id))
464
465
 
465
466
    def get_file_text(self, file_id):
 
467
        file_id = osutils.safe_file_id(file_id)
466
468
        return self.get_file(file_id).read()
467
469
 
468
470
    def get_file_byname(self, filename):
479
481
        incorrectly attributed to CURRENT_REVISION (but after committing, the
480
482
        attribution will be correct).
481
483
        """
 
484
        file_id = osutils.safe_file_id(file_id)
482
485
        basis = self.basis_tree()
483
486
        changes = self._iter_changes(basis, True, [file_id]).next()
484
487
        changed_content, kind = changes[2], changes[6]
528
531
        
529
532
    def _get_store_filename(self, file_id):
530
533
        ## XXX: badly named; this is not in the store at all
 
534
        file_id = osutils.safe_file_id(file_id)
531
535
        return self.abspath(self.id2path(file_id))
532
536
 
533
537
    @needs_read_lock
566
570
            tree.set_parent_ids([revision_id])
567
571
 
568
572
    def id2abspath(self, file_id):
 
573
        file_id = osutils.safe_file_id(file_id)
569
574
        return self.abspath(self.id2path(file_id))
570
575
 
571
576
    def has_id(self, file_id):
572
577
        # files that have been deleted are excluded
 
578
        file_id = osutils.safe_file_id(file_id)
573
579
        inv = self.inventory
574
580
        if not inv.has_id(file_id):
575
581
            return False
577
583
        return osutils.lexists(self.abspath(path))
578
584
 
579
585
    def has_or_had_id(self, file_id):
 
586
        file_id = osutils.safe_file_id(file_id)
580
587
        if file_id == self.inventory.root.file_id:
581
588
            return True
582
589
        return self.inventory.has_id(file_id)
584
591
    __contains__ = has_id
585
592
 
586
593
    def get_file_size(self, file_id):
 
594
        file_id = osutils.safe_file_id(file_id)
587
595
        return os.path.getsize(self.id2abspath(file_id))
588
596
 
589
597
    @needs_read_lock
590
598
    def get_file_sha1(self, file_id, path=None, stat_value=None):
 
599
        file_id = osutils.safe_file_id(file_id)
591
600
        if not path:
592
601
            path = self._inventory.id2path(file_id)
593
602
        return self._hashcache.get_sha1(path, stat_value)
594
603
 
595
604
    def get_file_mtime(self, file_id, path=None):
 
605
        file_id = osutils.safe_file_id(file_id)
596
606
        if not path:
597
607
            path = self._inventory.id2path(file_id)
598
608
        return os.lstat(self.abspath(path)).st_mtime
599
609
 
600
610
    if not supports_executable():
601
611
        def is_executable(self, file_id, path=None):
 
612
            file_id = osutils.safe_file_id(file_id)
602
613
            return self._inventory[file_id].executable
603
614
    else:
604
615
        def is_executable(self, file_id, path=None):
605
616
            if not path:
 
617
                file_id = osutils.safe_file_id(file_id)
606
618
                path = self.id2path(file_id)
607
619
            mode = os.lstat(self.abspath(path)).st_mode
608
620
            return bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)
620
632
            if file_id is None:
621
633
                inv.add_path(f, kind=kind)
622
634
            else:
 
635
                file_id = osutils.safe_file_id(file_id)
623
636
                inv.add_path(f, kind=kind, file_id=file_id)
624
637
        self._write_inventory(inv)
625
638
 
718
731
 
719
732
    def _set_merges_from_parent_ids(self, parent_ids):
720
733
        merges = parent_ids[1:]
721
 
        self._control_files.put_utf8('pending-merges', '\n'.join(merges))
 
734
        self._control_files.put_bytes('pending-merges', '\n'.join(merges))
722
735
 
723
736
    @needs_tree_write_lock
724
737
    def set_parent_ids(self, revision_ids, allow_leftmost_as_ghost=False):
781
794
    def set_merge_modified(self, modified_hashes):
782
795
        def iter_stanzas():
783
796
            for file_id, hash in modified_hashes.iteritems():
784
 
                yield Stanza(file_id=file_id, hash=hash)
 
797
                yield Stanza(file_id=file_id.decode('utf8'), hash=hash)
785
798
        self._put_rio('merge-hashes', iter_stanzas(), MERGE_MODIFIED_HEADER_1)
786
799
 
787
800
    @needs_tree_write_lock
1407
1420
        :raises: NoSuchId if any fileid is not currently versioned.
1408
1421
        """
1409
1422
        for file_id in file_ids:
 
1423
            file_id = osutils.safe_file_id(file_id)
1410
1424
            if self._inventory.has_id(file_id):
1411
1425
                self._inventory.remove_recursive_id(file_id)
1412
1426
            else:
1493
1507
    @needs_write_lock
1494
1508
    def put_file_bytes_non_atomic(self, file_id, bytes):
1495
1509
        """See MutableTree.put_file_bytes_non_atomic."""
 
1510
        file_id = osutils.safe_file_id(file_id)
1496
1511
        stream = file(self.id2abspath(file_id), 'wb')
1497
1512
        try:
1498
1513
            stream.write(bytes)
1858
1873
                DeprecationWarning,
1859
1874
                stacklevel=3)
1860
1875
            file_id = ROOT_ID
 
1876
        else:
 
1877
            file_id = osutils.safe_file_id(file_id)
1861
1878
        self._set_root_id(file_id)
1862
1879
 
1863
1880
    def _set_root_id(self, file_id):
2276
2293
                pass
2277
2294
            return False
2278
2295
        else:
2279
 
            self._control_files.put_utf8('last-revision', revision_id)
 
2296
            self._control_files.put_bytes('last-revision', revision_id)
2280
2297
            return True
2281
2298
 
2282
2299
    @needs_tree_write_lock
2495
2512
        sio.seek(0)
2496
2513
        control_files.put('inventory', sio)
2497
2514
 
2498
 
        control_files.put_utf8('pending-merges', '')
 
2515
        control_files.put_bytes('pending-merges', '')
2499
2516
        
2500
2517
 
2501
2518
    def initialize(self, a_bzrdir, revision_id=None):