/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 bzrlib/xml4.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-18 18:57:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1868.
  • Revision ID: john@arbash-meinel.com-20060718185754-4007745748e28db9
Commit timestamp restricted to 1ms precision.

The old code would restrict to 1s resolution if the timestamp was
supplied, while it preserved full resolution if the timestamp was
auto generated. Now both paths preserve only 1ms resolution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 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
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
 
 
17
 
from bzrlib.xml_serializer import (
18
 
    Element,
19
 
    SubElement,
20
 
    XMLSerializer,
21
 
    escape_invalid_chars,
22
 
    )
23
 
from bzrlib.inventory import ROOT_ID, Inventory
 
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
14
 
 
15
 
 
16
from bzrlib.xml_serializer import ElementTree, SubElement, Element, Serializer
 
17
from bzrlib.inventory import ROOT_ID, Inventory, InventoryEntry
24
18
import bzrlib.inventory as inventory
25
 
from bzrlib.revision import Revision
 
19
from bzrlib.revision import Revision        
26
20
from bzrlib.errors import BzrError
27
21
 
28
22
 
29
 
class _Serializer_v4(XMLSerializer):
 
23
 
 
24
 
 
25
 
 
26
 
 
27
class _Serializer_v4(Serializer):
30
28
    """Version 0.0.4 serializer
31
29
 
32
 
    You should use the serializer_v4 singleton.
33
 
 
34
 
    v4 serialisation is no longer supported, only deserialisation.
35
 
    """
36
 
 
 
30
    You should use the serializer_v4 singleton."""
 
31
    
37
32
    __slots__ = []
 
33
    
 
34
    def _pack_inventory(self, inv):
 
35
        """Convert to XML Element"""
 
36
        e = Element('inventory')
 
37
        e.text = '\n'
 
38
        if inv.root.file_id not in (None, ROOT_ID):
 
39
            e.set('file_id', inv.root.file_id)
 
40
        for path, ie in inv.iter_entries():
 
41
            e.append(self._pack_entry(ie))
 
42
        return e
 
43
 
38
44
 
39
45
    def _pack_entry(self, ie):
40
46
        """Convert InventoryEntry to XML element"""
43
49
        e.set('file_id', ie.file_id)
44
50
        e.set('kind', ie.kind)
45
51
 
46
 
        if ie.text_size is not None:
 
52
        if ie.text_size != None:
47
53
            e.set('text_size', '%d' % ie.text_size)
48
54
 
49
55
        for f in ['text_id', 'text_sha1', 'symlink_target']:
50
56
            v = getattr(ie, f)
51
 
            if v is not None:
 
57
            if v != None:
52
58
                e.set(f, v)
53
59
 
54
60
        # to be conservative, we don't externalize the root pointers
55
61
        # for now, leaving them as null in the xml form.  in a future
56
62
        # version it will be implied by nested elements.
57
63
        if ie.parent_id != ROOT_ID:
 
64
            assert isinstance(ie.parent_id, basestring)
58
65
            e.set('parent_id', ie.parent_id)
59
66
 
60
67
        e.tail = '\n'
62
69
        return e
63
70
 
64
71
 
65
 
    def _unpack_inventory(self, elt, revision_id=None, entry_cache=None,
66
 
                          return_from_cache=False):
 
72
    def _unpack_inventory(self, elt):
67
73
        """Construct from XML Element
68
 
 
69
 
        :param revision_id: Ignored parameter used by xml5.
70
74
        """
 
75
        assert elt.tag == 'inventory'
71
76
        root_id = elt.get('file_id') or ROOT_ID
72
77
        inv = Inventory(root_id)
73
78
        for e in elt:
74
 
            ie = self._unpack_entry(e, entry_cache=entry_cache,
75
 
                                    return_from_cache=return_from_cache)
 
79
            ie = self._unpack_entry(e)
76
80
            if ie.parent_id == ROOT_ID:
77
81
                ie.parent_id = root_id
78
82
            inv.add(ie)
79
83
        return inv
80
84
 
81
85
 
82
 
    def _unpack_entry(self, elt, entry_cache=None, return_from_cache=False):
 
86
    def _unpack_entry(self, elt):
 
87
        assert elt.tag == 'entry'
 
88
 
83
89
        ## original format inventories don't have a parent_id for
84
90
        ## nodes in the root directory, but it's cleaner to use one
85
91
        ## internally.
86
92
        parent_id = elt.get('parent_id')
87
 
        if parent_id is None:
 
93
        if parent_id == None:
88
94
            parent_id = ROOT_ID
89
95
 
90
96
        kind = elt.get('kind')
127
133
        root.text = '\n'
128
134
 
129
135
        msg = SubElement(root, 'message')
130
 
        msg.text = escape_invalid_chars(rev.message)[0]
 
136
        msg.text = rev.message
131
137
        msg.tail = '\n'
132
138
 
133
139
        if rev.parents:
136
142
            for i, parent_id in enumerate(rev.parents):
137
143
                p = SubElement(pelts, 'revision_ref')
138
144
                p.tail = '\n'
 
145
                assert parent_id
139
146
                p.set('revision_id', parent_id)
140
147
                if i < len(rev.parent_sha1s):
141
148
                    p.set('revision_sha1', rev.parent_sha1s[i])
142
149
        return root
143
150
 
144
 
 
 
151
    
145
152
    def _unpack_revision(self, elt):
146
153
        """XML Element -> Revision object"""
147
 
 
 
154
        
148
155
        # <changeset> is deprecated...
149
156
        if elt.tag not in ('revision', 'changeset'):
150
157
            raise BzrError("unexpected tag in revision file: %r" % elt)
163
170
 
164
171
        if pelts:
165
172
            for p in pelts:
 
173
                assert p.tag == 'revision_ref', \
 
174
                       "bad parent node tag %r" % p.tag
166
175
                rev.parent_ids.append(p.get('revision_id'))
167
176
                rev.parent_sha1s.append(p.get('revision_sha1'))
168
177
            if precursor:
169
178
                # must be consistent
170
179
                prec_parent = rev.parent_ids[0]
 
180
                assert prec_parent == precursor
171
181
        elif precursor:
172
182
            # revisions written prior to 0.0.5 have a single precursor
173
183
            # give as an attribute