~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml5.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-06-03 20:18:35 UTC
  • mfrom: (1185.82.137 w-changeset)
  • Revision ID: pqm@pqm.ubuntu.com-20060603201835-1c9a1725641ccd24
Implement bundles

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
2
 
#
3
1
# This program is free software; you can redistribute it and/or modify
4
2
# it under the terms of the GNU General Public License as published by
5
3
# the Free Software Foundation; either version 2 of the License, or
6
4
# (at your option) any later version.
7
 
#
 
5
 
8
6
# This program is distributed in the hope that it will be useful,
9
7
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
8
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
9
# GNU General Public License for more details.
12
 
#
 
10
 
13
11
# You should have received a copy of the GNU General Public License
14
12
# along with this program; if not, write to the Free Software
15
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
14
 
17
15
 
18
 
from bzrlib.xml_serializer import SubElement, Element, Serializer
 
16
from bzrlib.xml_serializer import ElementTree, SubElement, Element, Serializer
19
17
from bzrlib.inventory import ROOT_ID, Inventory, InventoryEntry
20
18
import bzrlib.inventory as inventory
21
 
from bzrlib.revision import Revision
 
19
from bzrlib.revision import Revision        
22
20
from bzrlib.errors import BzrError
23
21
 
24
22
 
32
30
    
33
31
    def _pack_inventory(self, inv):
34
32
        """Convert to XML Element"""
35
 
        entries = inv.iter_entries()
36
33
        e = Element('inventory',
37
34
                    format='5')
38
35
        e.text = '\n'
39
 
        path, root = entries.next()
40
 
        if root.file_id not in (None, ROOT_ID):
41
 
            e.set('file_id', root.file_id)
 
36
        if inv.root.file_id not in (None, ROOT_ID):
 
37
            e.set('file_id', inv.root.file_id)
42
38
        if inv.revision_id is not None:
43
39
            e.set('revision_id', inv.revision_id)
44
 
        for path, ie in entries:
 
40
        for path, ie in inv.iter_entries():
45
41
            e.append(self._pack_entry(ie))
46
42
        return e
47
43
 
 
44
 
48
45
    def _pack_entry(self, ie):
49
46
        """Convert InventoryEntry to XML element"""
50
47
        # TODO: should just be a plain assertion
71
68
        if ie.parent_id != ROOT_ID:
72
69
            assert isinstance(ie.parent_id, basestring)
73
70
            e.set('parent_id', ie.parent_id)
 
71
 
74
72
        e.tail = '\n'
 
73
 
75
74
        return e
76
75
 
 
76
 
77
77
    def _pack_revision(self, rev):
78
78
        """Revision object -> xml tree"""
79
79
        root = Element('revision',
201
201
            return
202
202
        for prop_elt in props_elt:
203
203
            assert prop_elt.tag == 'property', \
204
 
                "bad tag under properties list: %r" % prop_elt.tag
 
204
                "bad tag under properties list: %r" % p.tag
205
205
            name = prop_elt.get('name')
206
206
            value = prop_elt.text
207
 
            # If a property had an empty value ('') cElementTree reads
208
 
            # that back as None, convert it back to '', so that all
209
 
            # properties have string values
210
 
            if value is None:
211
 
                value = ''
212
207
            assert name not in rev.properties, \
213
 
                "repeated property %r" % name
 
208
                "repeated property %r" % p.name
214
209
            rev.properties[name] = value
215
210
 
216
211