~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml_serializer.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-10-06 20:45:48 UTC
  • mfrom: (4728.1.2 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20091006204548-bjnc3z4k256ppimz
MutableTree.has_changes() does not require a tree parameter anymore

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# importing this module is fairly slow because it has to load several
23
23
# ElementTree bits
24
24
 
25
 
from bzrlib import registry
 
25
from bzrlib.serializer import Serializer
26
26
from bzrlib.trace import mutter, warning
27
27
 
28
28
try:
49
49
from bzrlib import errors
50
50
 
51
51
 
52
 
class Serializer(object):
53
 
    """Abstract object serialize/deserialize"""
54
 
 
55
 
    def write_inventory(self, inv, f):
56
 
        """Write inventory to a file"""
57
 
        raise NotImplementedError(self.write_inventory)
58
 
 
59
 
    def write_inventory_to_string(self, inv):
60
 
        raise NotImplementedError(self.write_inventory_to_string)
 
52
class XMLSerializer(Serializer):
 
53
    """Abstract XML object serialize/deserialize"""
 
54
 
 
55
    squashes_xml_invalid_characters = True
61
56
 
62
57
    def read_inventory_from_string(self, xml_string, revision_id=None,
63
58
                                   entry_cache=None):
175
170
elementtree.ElementTree._escape_cdata = _escape_cdata
176
171
 
177
172
 
178
 
class SerializerRegistry(registry.Registry):
179
 
    """Registry for serializer objects"""
180
 
 
181
 
 
182
 
format_registry = SerializerRegistry()
183
 
format_registry.register_lazy('4', 'bzrlib.xml4', 'serializer_v4')
184
 
format_registry.register_lazy('5', 'bzrlib.xml5', 'serializer_v5')
185
 
format_registry.register_lazy('6', 'bzrlib.xml6', 'serializer_v6')
186
 
format_registry.register_lazy('7', 'bzrlib.xml7', 'serializer_v7')
187
 
format_registry.register_lazy('8', 'bzrlib.xml8', 'serializer_v8')
 
173
def escape_invalid_chars(message):
 
174
    """Escape the XML-invalid characters in a commit message.
 
175
 
 
176
    :param message: Commit message to escape
 
177
    :return: tuple with escaped message and number of characters escaped
 
178
    """
 
179
    if message is None:
 
180
        return None, 0
 
181
    # Python strings can include characters that can't be
 
182
    # represented in well-formed XML; escape characters that
 
183
    # aren't listed in the XML specification
 
184
    # (http://www.w3.org/TR/REC-xml/#NT-Char).
 
185
    return re.subn(u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+',
 
186
            lambda match: match.group(0).encode('unicode_escape'),
 
187
            message)