~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: mbp at sourcefrog
  • Date: 2005-03-23 03:09:50 UTC
  • Revision ID: mbp@sourcefrog.net-20050323030950-c762f4c38f99dbd9
Prepare for smart recursive add.

- New Inventory.add_path, so that callers don't need to know so much
  about path lookup.

- Make gen_file_id public.

- New add module and smart_add function; does previous add operations
  more cleanly but not recursive mode yet.

- New warning() function.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
from xml import XMLMixin
33
33
from errors import bailout
34
 
from osutils import uuid, quotefn, splitpath, joinpath, appendpath
35
 
from trace import mutter
 
34
 
 
35
import bzrlib
 
36
from bzrlib.osutils import uuid, quotefn, splitpath, joinpath, appendpath
 
37
from bzrlib.trace import mutter
36
38
 
37
39
class InventoryEntry(XMLMixin):
38
40
    """Description of a versioned file.
360
362
            self._tree[entry.file_id] = {}
361
363
 
362
364
 
 
365
    def add_path(self, relpath, kind, file_id=None):
 
366
        """Add entry from a path.
 
367
 
 
368
        The immediate parent must already be versioned"""
 
369
        parts = bzrlib.osutils.splitpath(relpath)
 
370
        if len(parts) == 0:
 
371
            bailout("cannot re-add root of inventory")
 
372
 
 
373
        if file_id is None:
 
374
            file_id = bzrlib.branch.gen_file_id(relpath)
 
375
 
 
376
        parent_id = self.path2id(parts[:-1])
 
377
        ie = InventoryEntry(file_id, parts[-1],
 
378
                            kind=kind, parent_id=parent_id)
 
379
        return self.add(ie)
 
380
 
 
381
 
363
382
    def __delitem__(self, file_id):
364
383
        """Remove entry by id.
365
384
 
468
487
        This returns the entry of the last component in the path,
469
488
        which may be either a file or a directory.
470
489
        """
471
 
        assert isinstance(name, types.StringTypes)
 
490
        if isinstance(name, types.StringTypes):
 
491
            name = splitpath(name)
472
492
 
473
493
        parent_id = None
474
 
        for f in splitpath(name):
 
494
        for f in name:
475
495
            try:
476
496
                cie = self._tree[parent_id][f]
477
497
                assert cie.name == f
497
517
 
498
518
 
499
519
 
 
520
 
 
521
 
500
522
if __name__ == '__main__':
501
523
    import doctest, inventory
502
524
    doctest.testmod(inventory)