~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/dirstate.py

(working), fix dirstate to use utf8 file ids.
Also fix a bug in _generate_inventory for non-ascii paths. It was
combining the decoded path with the utf8 prefix and assuming the
whole thing was utf8.

Show diffs side-by-side

added added

removed removed

Lines of Context:
306
306
        # faster than three separate encodes.
307
307
        utf8path = (dirname + '/' + basename).strip('/').encode('utf8')
308
308
        dirname, basename = os.path.split(utf8path)
309
 
        entry_key = (dirname, basename, file_id.encode('utf8'))
 
309
        assert file_id.__class__ == str, \
 
310
            "must be a utf8 file_id not %s" % (type(file_id))
 
311
        entry_key = (dirname, basename, file_id)
310
312
        self._read_dirblocks_if_needed()
311
313
        block_index, present = self._find_block_index_from_key(entry_key)
312
314
        if not present:
756
758
            id.
757
759
        """
758
760
        kind = inv_entry.kind
759
 
        tree_data = inv_entry.revision.encode('utf8')
 
761
        tree_data = inv_entry.revision
760
762
        assert len(tree_data) > 0, 'empty revision for the inv_entry.'
761
763
        if kind == 'directory':
762
764
            fingerprint = ''
966
968
 
967
969
        :param path: The path inside the tree to set - '' is the root, 'foo'
968
970
            is the path foo in the root.
969
 
        :param new_id: The new id to assign to the path. If unicode, it will
970
 
            be encoded to utf8. In future this will be deprecated: avoid using
971
 
            unicode ids if possible.
 
971
        :param new_id: The new id to assign to the path. This must be a utf8
 
972
            file id (not unicode, and not None).
972
973
        """
973
974
        # TODO: start warning here.
974
 
        if new_id.__class__ == unicode:
975
 
            new_id = new_id.encode('utf8')
 
975
        assert new_id.__class__ == str
976
976
        self._read_dirblocks_if_needed()
977
977
        if len(path):
978
978
            import pdb;pdb.set_trace()
1067
1067
                # new entry at this path: by adding the id->path mapping last,
1068
1068
                # all the mappings are valid and have correct relocation
1069
1069
                # records where needed. 
1070
 
                file_id = entry.file_id.encode('utf8')
 
1070
                file_id = entry.file_id
1071
1071
                path_utf8 = path.encode('utf8')
1072
1072
                dirname, basename = os.path.split(path_utf8)
1073
1073
                new_entry_key = (dirname, basename, file_id)
1165
1165
                # convert new into dirblock style
1166
1166
                new_path_utf8 = current_new[0].encode('utf8')
1167
1167
                new_dirname, new_basename = os.path.split(new_path_utf8)
1168
 
                new_id = current_new[1].file_id.encode('utf8')
 
1168
                new_id = current_new[1].file_id
1169
1169
                new_entry_key = (new_dirname, new_basename, new_id)
1170
1170
            else:
1171
1171
                # for safety disable variables