~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.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:
94
94
    >>> for ix, j in enumerate(i.iter_entries()):
95
95
    ...   print (j[0] == shouldbe[ix], j[1])
96
96
    ... 
97
 
    (True, InventoryDirectory('TREE_ROOT', '', parent_id=None, revision=None))
 
97
    (True, InventoryDirectory('TREE_ROOT', u'', parent_id=None, revision=None))
98
98
    (True, InventoryDirectory('123', 'src', parent_id='TREE_ROOT', revision=None))
99
99
    (True, InventoryFile('2323', 'hello.c', parent_id='123', sha1=None, len=None))
100
100
    >>> i.add(InventoryFile('2323', 'bye.c', '123'))
295
295
        self.text_sha1 = None
296
296
        self.text_size = None
297
297
        self.file_id = file_id
 
298
        assert isinstance(file_id, (str, None.__class__)), \
 
299
            'bad type %r for %r' % (type(file_id), file_id)
298
300
        self.name = name
299
301
        self.text_id = text_id
300
302
        self.parent_id = parent_id
875
877
        an id of None.
876
878
        """
877
879
        if root_id is not None:
878
 
            self._set_root(InventoryDirectory(root_id, '', None))
 
880
            assert root_id.__class__ == str
 
881
            self._set_root(InventoryDirectory(root_id, u'', None))
879
882
        else:
880
883
            self.root = None
881
884
            self._byid = {}
956
959
 
957
960
        :return: This yields (path, entry) pairs
958
961
        """
 
962
        if specific_file_ids:
 
963
            specific_file_ids = [osutils.safe_file_id(fid)
 
964
                                 for fid in specific_file_ids]
959
965
        # TODO? Perhaps this should return the from_dir so that the root is
960
966
        # yielded? or maybe an option?
961
967
        if from_dir is None:
970
976
            from_dir = self.root
971
977
            if (specific_file_ids is None or 
972
978
                self.root.file_id in specific_file_ids):
973
 
                yield '', self.root
 
979
                yield u'', self.root
974
980
        elif isinstance(from_dir, basestring):
975
981
            from_dir = self._byid[from_dir]
976
982
 
1053
1059
        >>> '456' in inv
1054
1060
        False
1055
1061
        """
 
1062
        file_id = osutils.safe_file_id(file_id)
1056
1063
        return (file_id in self._byid)
1057
1064
 
1058
1065
    def __getitem__(self, file_id):
1064
1071
        >>> inv['123123'].name
1065
1072
        'hello.c'
1066
1073
        """
 
1074
        file_id = osutils.safe_file_id(file_id)
1067
1075
        try:
1068
1076
            return self._byid[file_id]
1069
1077
        except KeyError:
1071
1079
            raise errors.NoSuchId(self, file_id)
1072
1080
 
1073
1081
    def get_file_kind(self, file_id):
 
1082
        file_id = osutils.safe_file_id(file_id)
1074
1083
        return self._byid[file_id].kind
1075
1084
 
1076
1085
    def get_child(self, parent_id, filename):
 
1086
        parent_id = osutils.safe_file_id(parent_id)
1077
1087
        return self[parent_id].children.get(filename)
1078
1088
 
1079
1089
    def add(self, entry):
1116
1126
        if len(parts) == 0:
1117
1127
            if file_id is None:
1118
1128
                file_id = generate_ids.gen_root_id()
 
1129
            else:
 
1130
                file_id = osutils.safe_file_id(file_id)
1119
1131
            self.root = InventoryDirectory(file_id, '', None)
1120
1132
            self._byid = {self.root.file_id: self.root}
1121
1133
            return self.root
1139
1151
        >>> '123' in inv
1140
1152
        False
1141
1153
        """
 
1154
        file_id = osutils.safe_file_id(file_id)
1142
1155
        ie = self[file_id]
1143
1156
 
1144
1157
        assert ie.parent_id is None or \
1177
1190
 
1178
1191
    def _iter_file_id_parents(self, file_id):
1179
1192
        """Yield the parents of file_id up to the root."""
 
1193
        file_id = osutils.safe_file_id(file_id)
1180
1194
        while file_id is not None:
1181
1195
            try:
1182
1196
                ie = self._byid[file_id]
1193
1207
        is equal to the depth of the file in the tree, counting the
1194
1208
        root directory as depth 1.
1195
1209
        """
 
1210
        file_id = osutils.safe_file_id(file_id)
1196
1211
        p = []
1197
1212
        for parent in self._iter_file_id_parents(file_id):
1198
1213
            p.insert(0, parent.file_id)
1207
1222
        >>> print i.id2path('foo-id')
1208
1223
        src/foo.c
1209
1224
        """
 
1225
        file_id = osutils.safe_file_id(file_id)
1210
1226
        # get all names, skipping root
1211
1227
        return '/'.join(reversed(
1212
1228
            [parent.name for parent in 
1250
1266
        return bool(self.path2id(names))
1251
1267
 
1252
1268
    def has_id(self, file_id):
 
1269
        file_id = osutils.safe_file_id(file_id)
1253
1270
        return (file_id in self._byid)
1254
1271
 
1255
1272
    def remove_recursive_id(self, file_id):
1257
1274
        
1258
1275
        :param file_id: A file_id to remove.
1259
1276
        """
 
1277
        file_id = osutils.safe_file_id(file_id)
1260
1278
        to_find_delete = [self._byid[file_id]]
1261
1279
        to_delete = []
1262
1280
        while to_find_delete:
1275
1293
 
1276
1294
        This can change either the name, or the parent, or both.
1277
1295
 
1278
 
        This does not move the working file."""
 
1296
        This does not move the working file.
 
1297
        """
 
1298
        file_id = osutils.safe_file_id(file_id)
1279
1299
        if not is_valid_name(new_name):
1280
1300
            raise BzrError("not an acceptable filename: %r" % new_name)
1281
1301
 
1300
1320
        file_ie.parent_id = new_parent_id
1301
1321
 
1302
1322
    def is_root(self, file_id):
 
1323
        file_id = osutils.safe_file_id(file_id)
1303
1324
        return self.root is not None and file_id == self.root.file_id
1304
1325
 
1305
1326
 
1313
1334
    """
1314
1335
    if file_id is None:
1315
1336
        file_id = generate_ids.gen_file_id(name)
 
1337
    else:
 
1338
        file_id = osutils.safe_file_id(file_id)
1316
1339
 
1317
1340
    norm_name, can_access = osutils.normalized_filename(name)
1318
1341
    if norm_name != name: