~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

[merge] bzr.dev 2298 (broken)

Show diffs side-by-side

added added

removed removed

Lines of Context:
451
451
        return osutils.lexists(self.abspath(filename))
452
452
 
453
453
    def get_file(self, file_id):
 
454
        file_id = osutils.safe_file_id(file_id)
454
455
        return self.get_file_byname(self.id2path(file_id))
455
456
 
456
457
    def get_file_text(self, file_id):
 
458
        file_id = osutils.safe_file_id(file_id)
457
459
        return self.get_file(file_id).read()
458
460
 
459
461
    def get_file_byname(self, filename):
470
472
        incorrectly attributed to CURRENT_REVISION (but after committing, the
471
473
        attribution will be correct).
472
474
        """
 
475
        file_id = osutils.safe_file_id(file_id)
473
476
        basis = self.basis_tree()
474
477
        changes = self._iter_changes(basis, True, [file_id]).next()
475
478
        changed_content, kind = changes[2], changes[6]
519
522
        
520
523
    def _get_store_filename(self, file_id):
521
524
        ## XXX: badly named; this is not in the store at all
 
525
        file_id = osutils.safe_file_id(file_id)
522
526
        return self.abspath(self.id2path(file_id))
523
527
 
524
528
    @needs_read_lock
557
561
            tree.set_parent_ids([revision_id])
558
562
 
559
563
    def id2abspath(self, file_id):
 
564
        file_id = osutils.safe_file_id(file_id)
560
565
        return self.abspath(self.id2path(file_id))
561
566
 
562
567
    def has_id(self, file_id):
563
568
        # files that have been deleted are excluded
 
569
        file_id = osutils.safe_file_id(file_id)
564
570
        inv = self.inventory
565
571
        if not inv.has_id(file_id):
566
572
            return False
568
574
        return osutils.lexists(self.abspath(path))
569
575
 
570
576
    def has_or_had_id(self, file_id):
 
577
        file_id = osutils.safe_file_id(file_id)
571
578
        if file_id == self.inventory.root.file_id:
572
579
            return True
573
580
        return self.inventory.has_id(file_id)
575
582
    __contains__ = has_id
576
583
 
577
584
    def get_file_size(self, file_id):
 
585
        file_id = osutils.safe_file_id(file_id)
578
586
        return os.path.getsize(self.id2abspath(file_id))
579
587
 
580
588
    @needs_read_lock
581
589
    def get_file_sha1(self, file_id, path=None, stat_value=None):
 
590
        file_id = osutils.safe_file_id(file_id)
582
591
        if not path:
583
592
            path = self._inventory.id2path(file_id)
584
593
        return self._hashcache.get_sha1(path, stat_value)
585
594
 
586
595
    def get_file_mtime(self, file_id, path=None):
 
596
        file_id = osutils.safe_file_id(file_id)
587
597
        if not path:
588
598
            path = self._inventory.id2path(file_id)
589
599
        return os.lstat(self.abspath(path)).st_mtime
590
600
 
591
601
    if not supports_executable():
592
602
        def is_executable(self, file_id, path=None):
 
603
            file_id = osutils.safe_file_id(file_id)
593
604
            return self._inventory[file_id].executable
594
605
    else:
595
606
        def is_executable(self, file_id, path=None):
596
607
            if not path:
 
608
                file_id = osutils.safe_file_id(file_id)
597
609
                path = self.id2path(file_id)
598
610
            mode = os.lstat(self.abspath(path)).st_mode
599
611
            return bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)
611
623
            if file_id is None:
612
624
                inv.add_path(f, kind=kind)
613
625
            else:
 
626
                file_id = osutils.safe_file_id(file_id)
614
627
                inv.add_path(f, kind=kind, file_id=file_id)
615
628
        self._write_inventory(inv)
616
629
 
705
718
 
706
719
    def _set_merges_from_parent_ids(self, parent_ids):
707
720
        merges = parent_ids[1:]
708
 
        self._control_files.put_utf8('pending-merges', '\n'.join(merges))
 
721
        self._control_files.put_bytes('pending-merges', '\n'.join(merges))
709
722
 
710
723
    @needs_tree_write_lock
711
724
    def set_parent_ids(self, revision_ids, allow_leftmost_as_ghost=False):
768
781
    def set_merge_modified(self, modified_hashes):
769
782
        def iter_stanzas():
770
783
            for file_id, hash in modified_hashes.iteritems():
771
 
                yield Stanza(file_id=file_id, hash=hash)
 
784
                yield Stanza(file_id=file_id.decode('utf8'), hash=hash)
772
785
        self._put_rio('merge-hashes', iter_stanzas(), MERGE_MODIFIED_HEADER_1)
773
786
 
774
787
    @needs_tree_write_lock
1292
1305
        :raises: NoSuchId if any fileid is not currently versioned.
1293
1306
        """
1294
1307
        for file_id in file_ids:
 
1308
            file_id = osutils.safe_file_id(file_id)
1295
1309
            if self._inventory.has_id(file_id):
1296
1310
                self._inventory.remove_recursive_id(file_id)
1297
1311
            else:
1378
1392
    @needs_write_lock
1379
1393
    def put_file_bytes_non_atomic(self, file_id, bytes):
1380
1394
        """See MutableTree.put_file_bytes_non_atomic."""
 
1395
        file_id = osutils.safe_file_id(file_id)
1381
1396
        stream = file(self.id2abspath(file_id), 'wb')
1382
1397
        try:
1383
1398
            stream.write(bytes)
1744
1759
                DeprecationWarning,
1745
1760
                stacklevel=3)
1746
1761
            file_id = ROOT_ID
 
1762
        else:
 
1763
            file_id = osutils.safe_file_id(file_id)
1747
1764
        self._set_root_id(file_id)
1748
1765
 
1749
1766
    def _set_root_id(self, file_id):
2162
2179
                pass
2163
2180
            return False
2164
2181
        else:
2165
 
            self._control_files.put_utf8('last-revision', revision_id)
 
2182
            self._control_files.put_bytes('last-revision', revision_id)
2166
2183
            return True
2167
2184
 
2168
2185
    @needs_tree_write_lock
2321
2338
        sio.seek(0)
2322
2339
        control_files.put('inventory', sio)
2323
2340
 
2324
 
        control_files.put_utf8('pending-merges', '')
 
2341
        control_files.put_bytes('pending-merges', '')
2325
2342
        
2326
2343
 
2327
2344
    def initialize(self, a_bzrdir, revision_id=None):