~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml4.py

  • Committer: v.ladeuil+lp at free
  • Date: 2006-10-12 14:29:32 UTC
  • mto: (2145.1.1 keepalive)
  • mto: This revision was merged to the branch mainline in revision 2146.
  • Revision ID: v.ladeuil+lp@free.fr-20061012142932-7221fe16d2b48fa3
Shuffle http related test code. Hopefully it ends up at the right place :)

* bzrlib/tests/HttpServer.py: 
New file. bzrlib.tests.ChrootedTestCase use HttpServer. So the
class can't be defined in bzrlib.tests.HTTPUtils because it
creates a circular dependency (bzrlib.tests.HTTPUtils needs to
import bzrlib.tests).

* bzrlib/transport/http/_urllib.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/_pycurl.py: 
Transfer test server definition to bzrlib.tests.HttpServer. Clean
up imports.

* bzrlib/transport/http/__init__.py: 
Transfer all test related code to either bzrlib.tests.HttpServer
and bzrlib.tests.HTTPUtils.
Fix all use of TransportNotPossible and InvalidURL by prefixing it
by 'errors.' (this seems to be the preferred way in the rest of
bzr).
Get rid of unused imports.

* bzrlib/tests/test_transport.py:
(ReadonlyDecoratorTransportTest.test_local_parameters,
FakeNFSDecoratorTests.test_http_parameters): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_sftp_transport.py:
(set_test_transport_to_sftp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

* bzrlib/tests/test_selftest.py:
(TestTestCaseWithTransport.test_get_readonly_url_http): Use
HttpServer from bzrlib.tests.HttpServer instead of
bzrlib.transport.http.

* bzrlib/tests/test_repository.py: 
Does *not* use HttpServer.

* bzrlib/tests/test_http.py: 
Build on top of bzrlib.tests.HttpServer and bzrlib.tests.HTTPUtils
instead of bzrlib.transport.http.

* bzrlib/tests/test_bzrdir.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_http.py:
(HTTPBranchTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/branch_implementations/test_branch.py:
(ChrootedTests.setUp): Use HttpServer from bzrlib.tests.HttpServer
instead of bzrlib.transport.http.

* bzrlib/tests/__init__.py:
(ChrootedTestCase.setUp): Use HttpServer from
bzrlib.tests.HttpServer instead of bzrlib.transport.http.

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
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
        # v4 serialization is not used any more.
 
37
        raise NotImplementedError(self._pack_inventory)
 
38
        e = Element('inventory')
 
39
        e.text = '\n'
 
40
        if inv.root.file_id not in (None, ROOT_ID):
 
41
            e.set('file_id', inv.root.file_id)
 
42
        for path, ie in inv.iter_entries():
 
43
            e.append(self._pack_entry(ie))
 
44
        return e
 
45
 
38
46
 
39
47
    def _pack_entry(self, ie):
40
48
        """Convert InventoryEntry to XML element"""
55
63
        # for now, leaving them as null in the xml form.  in a future
56
64
        # version it will be implied by nested elements.
57
65
        if ie.parent_id != ROOT_ID:
 
66
            assert isinstance(ie.parent_id, basestring)
58
67
            e.set('parent_id', ie.parent_id)
59
68
 
60
69
        e.tail = '\n'
62
71
        return e
63
72
 
64
73
 
65
 
    def _unpack_inventory(self, elt, revision_id=None, entry_cache=None,
66
 
                          return_from_cache=False):
 
74
    def _unpack_inventory(self, elt):
67
75
        """Construct from XML Element
68
 
 
69
 
        :param revision_id: Ignored parameter used by xml5.
70
76
        """
 
77
        assert elt.tag == 'inventory'
71
78
        root_id = elt.get('file_id') or ROOT_ID
72
79
        inv = Inventory(root_id)
73
80
        for e in elt:
74
 
            ie = self._unpack_entry(e, entry_cache=entry_cache,
75
 
                                    return_from_cache=return_from_cache)
 
81
            ie = self._unpack_entry(e)
76
82
            if ie.parent_id == ROOT_ID:
77
83
                ie.parent_id = root_id
78
84
            inv.add(ie)
79
85
        return inv
80
86
 
81
87
 
82
 
    def _unpack_entry(self, elt, entry_cache=None, return_from_cache=False):
 
88
    def _unpack_entry(self, elt):
 
89
        assert elt.tag == 'entry'
 
90
 
83
91
        ## original format inventories don't have a parent_id for
84
92
        ## nodes in the root directory, but it's cleaner to use one
85
93
        ## internally.
127
135
        root.text = '\n'
128
136
 
129
137
        msg = SubElement(root, 'message')
130
 
        msg.text = escape_invalid_chars(rev.message)[0]
 
138
        msg.text = rev.message
131
139
        msg.tail = '\n'
132
140
 
133
141
        if rev.parents:
136
144
            for i, parent_id in enumerate(rev.parents):
137
145
                p = SubElement(pelts, 'revision_ref')
138
146
                p.tail = '\n'
 
147
                assert parent_id
139
148
                p.set('revision_id', parent_id)
140
149
                if i < len(rev.parent_sha1s):
141
150
                    p.set('revision_sha1', rev.parent_sha1s[i])
142
151
        return root
143
152
 
144
 
 
 
153
    
145
154
    def _unpack_revision(self, elt):
146
155
        """XML Element -> Revision object"""
147
 
 
 
156
        
148
157
        # <changeset> is deprecated...
149
158
        if elt.tag not in ('revision', 'changeset'):
150
159
            raise BzrError("unexpected tag in revision file: %r" % elt)
163
172
 
164
173
        if pelts:
165
174
            for p in pelts:
 
175
                assert p.tag == 'revision_ref', \
 
176
                       "bad parent node tag %r" % p.tag
166
177
                rev.parent_ids.append(p.get('revision_id'))
167
178
                rev.parent_sha1s.append(p.get('revision_sha1'))
168
179
            if precursor:
169
180
                # must be consistent
170
181
                prec_parent = rev.parent_ids[0]
 
182
                assert prec_parent == precursor
171
183
        elif precursor:
172
184
            # revisions written prior to 0.0.5 have a single precursor
173
185
            # give as an attribute