/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to inventory.py

More work on roundtrip push support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
200
200
 
201
201
class GitInventory(inventory.Inventory):
202
202
 
 
203
    def __repr__(self):
 
204
        return "<%s for %r in %r>" % (self.__class__.__name__,
 
205
                self.root.hexsha, self.store)
 
206
 
203
207
    def __init__(self, tree_id, mapping, fileid_map, store, revision_id):
204
208
        super(GitInventory, self).__init__(revision_id=revision_id)
205
209
        self.store = store
208
212
        self.root = GitInventoryDirectory(self, None, tree_id, u"", u"", False)
209
213
 
210
214
    def _get_ie(self, path):
211
 
        if path == "":
 
215
        if path == "" or path == []:
212
216
            return self.root
213
 
        parts = path.split("/")
 
217
        if isinstance(path, basestring):
 
218
            parts = path.split("/")
 
219
        else:
 
220
            parts = path
214
221
        ie = self.root
215
222
        for name in parts:
216
223
            ie = ie.children[name]
257
264
class GitIndexInventory(inventory.Inventory):
258
265
    """Inventory that retrieves its contents from an index file."""
259
266
 
 
267
    def __repr__(self):
 
268
        return "<%s for %r>" % (self.__class__.__name__, self.index)
 
269
 
260
270
    def __init__(self, basis_inventory, fileid_map, index, store):
261
 
        super(GitIndexInventory, self).__init__(revision_id=None, root_id=basis_inventory.root.file_id)
 
271
        if basis_inventory is None:
 
272
            root_id = None
 
273
        else:
 
274
            root_id = basis_inventory.root.file_id
 
275
        super(GitIndexInventory, self).__init__(revision_id=None, root_id=root_id)
262
276
        self.basis_inv = basis_inventory
263
277
        self.fileid_map = fileid_map
264
278
        self.index = index
297
311
        return super(GitIndexInventory, self).id2path(file_id)
298
312
 
299
313
    def path2id(self, path):
 
314
        if type(path) in (list, tuple):
 
315
            path = "/".join(path)
300
316
        if path in self.index:
301
 
            return self.fileid_map.lookup_file_id(path)
302
 
        self._read_contents()
303
 
        return super(GitIndexInventory, self).path2id(path)
 
317
            file_id = self.fileid_map.lookup_file_id(path)
 
318
        else:
 
319
            self._read_contents()
 
320
            file_id = super(GitIndexInventory, self).path2id(path)
 
321
        if file_id is not None and type(file_id) is not str:
 
322
            raise AssertionError
 
323
        return file_id
304
324
 
305
325
    def __getitem__(self, file_id):
306
326
        self._read_contents()
318
338
                assert isinstance(path, str)
319
339
                assert isinstance(value, tuple) and len(value) == 10
320
340
                (ctime, mtime, dev, ino, mode, uid, gid, size, sha, flags) = value
321
 
                try:
322
 
                    old_ie = self.basis_inv._get_ie(path)
323
 
                except KeyError:
 
341
                if self.basis_inv is not None:
 
342
                    try:
 
343
                        old_ie = self.basis_inv._get_ie(path)
 
344
                    except KeyError:
 
345
                        old_ie = None
 
346
                else:
324
347
                    old_ie = None
325
348
                if old_ie is None:
326
349
                    file_id = self.fileid_map.lookup_file_id(path)
356
379
                parent_fid = self.add_parents(dirname)
357
380
            ie = self.add_path(dirname, 'directory',
358
381
                    self.fileid_map.lookup_file_id(dirname), parent_fid)
359
 
            if ie.file_id in self.basis_inv:
 
382
            if self.basis_inv is not None and ie.file_id in self.basis_inv:
360
383
                ie.revision = self.basis_inv[ie.file_id].revision
361
384
            file_id = ie.file_id
362
385
        if type(file_id) != str: