~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: Martin Pool
  • Date: 2005-06-21 06:10:18 UTC
  • Revision ID: mbp@sourcefrog.net-20050621061017-12e8f0ff45228338
- move whitebox/blackbox modules into bzrlib.selftest subdirectory

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
import sys, os.path, types, re
24
24
 
 
25
try:
 
26
    from cElementTree import Element, ElementTree, SubElement
 
27
except ImportError:
 
28
    from elementtree.ElementTree import Element, ElementTree, SubElement
 
29
 
 
30
from bzrlib.xml import XMLMixin
 
31
from bzrlib.errors import BzrError, BzrCheckError
 
32
 
25
33
import bzrlib
26
 
from bzrlib.errors import BzrError, BzrCheckError
27
 
 
28
34
from bzrlib.osutils import uuid, quotefn, splitpath, joinpath, appendpath
29
35
from bzrlib.trace import mutter
30
36
 
31
 
class InventoryEntry(object):
 
37
class InventoryEntry(XMLMixin):
32
38
    """Description of a versioned file.
33
39
 
34
40
    An InventoryEntry has the following fields, which are also
154
160
    
155
161
    def to_element(self):
156
162
        """Convert to XML element"""
157
 
        from bzrlib.xml import Element
158
 
        
159
163
        e = Element('entry')
160
164
 
161
165
        e.set('name', self.name)
244
248
 
245
249
 
246
250
 
247
 
class Inventory(object):
 
251
class Inventory(XMLMixin):
248
252
    """Inventory of versioned files in a tree.
249
253
 
250
254
    This describes which file_id is present at each point in the tree,
262
266
    inserted, other than through the Inventory API.
263
267
 
264
268
    >>> inv = Inventory()
 
269
    >>> inv.write_xml(sys.stdout)
 
270
    <inventory>
 
271
    </inventory>
265
272
    >>> inv.add(InventoryEntry('123-123', 'hello.c', 'file', ROOT_ID))
266
273
    >>> inv['123-123'].name
267
274
    'hello.c'
277
284
 
278
285
    >>> [x[0] for x in inv.iter_entries()]
279
286
    ['hello.c']
 
287
    
 
288
    >>> inv.write_xml(sys.stdout)
 
289
    <inventory>
 
290
    <entry file_id="123-123" kind="file" name="hello.c" />
 
291
    </inventory>
 
292
 
280
293
    """
281
294
    def __init__(self):
282
295
        """Create or read an inventory.
417
430
        """Add entry from a path.
418
431
 
419
432
        The immediate parent must already be versioned"""
420
 
        from bzrlib.errors import NotVersionedError
421
 
        
422
433
        parts = bzrlib.osutils.splitpath(relpath)
423
434
        if len(parts) == 0:
424
435
            raise BzrError("cannot re-add root of inventory")
425
436
 
426
437
        if file_id == None:
427
 
            from bzrlib.branch import gen_file_id
428
 
            file_id = gen_file_id(relpath)
429
 
 
430
 
        parent_path = parts[:-1]
431
 
        parent_id = self.path2id(parent_path)
432
 
        if parent_id == None:
433
 
            raise NotVersionedError(parent_path)
434
 
 
 
438
            file_id = bzrlib.branch.gen_file_id(relpath)
 
439
 
 
440
        parent_id = self.path2id(parts[:-1])
 
441
        assert parent_id != None
435
442
        ie = InventoryEntry(file_id, parts[-1],
436
443
                            kind=kind, parent_id=parent_id)
437
444
        return self.add(ie)
465
472
 
466
473
    def to_element(self):
467
474
        """Convert to XML Element"""
468
 
        from bzrlib.xml import Element
469
 
        
470
475
        e = Element('inventory')
471
476
        e.text = '\n'
472
477
        for path, ie in self.iter_entries():