~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-02-22 14:45:05 UTC
  • mfrom: (2294.1.11 utf8_file_ids)
  • Revision ID: pqm@pqm.ubuntu.com-20070222144505-5f7551602cad9332
(John Arbash Meinel, r=robert) Update apis to expect UTF-8 file ids instead of Unicode

Show diffs side-by-side

added added

removed removed

Lines of Context:
452
452
        return osutils.lexists(self.abspath(filename))
453
453
 
454
454
    def get_file(self, file_id):
 
455
        file_id = osutils.safe_file_id(file_id)
455
456
        return self.get_file_byname(self.id2path(file_id))
456
457
 
457
458
    def get_file_text(self, file_id):
 
459
        file_id = osutils.safe_file_id(file_id)
458
460
        return self.get_file(file_id).read()
459
461
 
460
462
    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._inventory.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
1286
1299
        :raises: NoSuchId if any fileid is not currently versioned.
1287
1300
        """
1288
1301
        for file_id in file_ids:
 
1302
            file_id = osutils.safe_file_id(file_id)
1289
1303
            if self._inventory.has_id(file_id):
1290
1304
                self._inventory.remove_recursive_id(file_id)
1291
1305
            else:
1368
1382
    @needs_write_lock
1369
1383
    def put_file_bytes_non_atomic(self, file_id, bytes):
1370
1384
        """See MutableTree.put_file_bytes_non_atomic."""
 
1385
        file_id = osutils.safe_file_id(file_id)
1371
1386
        stream = file(self.id2abspath(file_id), 'wb')
1372
1387
        try:
1373
1388
            stream.write(bytes)
1711
1726
                DeprecationWarning,
1712
1727
                stacklevel=3)
1713
1728
            file_id = ROOT_ID
 
1729
        else:
 
1730
            file_id = osutils.safe_file_id(file_id)
1714
1731
        inv = self._inventory
1715
1732
        orig_root_id = inv.root.file_id
1716
1733
        # TODO: it might be nice to exit early if there was nothing
1975
1992
                pass
1976
1993
            return False
1977
1994
        else:
1978
 
            self._control_files.put_utf8('last-revision', revision_id)
 
1995
            self._control_files.put_bytes('last-revision', revision_id)
1979
1996
            return True
1980
1997
 
1981
1998
    @needs_tree_write_lock
2133
2150
        sio.seek(0)
2134
2151
        control_files.put('inventory', sio)
2135
2152
 
2136
 
        control_files.put_utf8('pending-merges', '')
 
2153
        control_files.put_bytes('pending-merges', '')
2137
2154
        
2138
2155
 
2139
2156
    def initialize(self, a_bzrdir, revision_id=None):