bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 4763.2.4
by John Arbash Meinel merge bzr.2.1 in preparation for NEWS entry. | 1 | # Copyright (C) 2005-2010 Canonical Ltd
 | 
| 2052.3.1
by John Arbash Meinel Add tests to cleanup the copyright of all source files | 2 | #
 | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 3 | # This program is free software; you can redistribute it and/or modify
 | 
| 4 | # it under the terms of the GNU General Public License as published by
 | |
| 5 | # the Free Software Foundation; either version 2 of the License, or
 | |
| 6 | # (at your option) any later version.
 | |
| 1887.1.1
by Adeodato Simó Do not separate paragraphs in the copyright statement with blank lines, | 7 | #
 | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 8 | # This program is distributed in the hope that it will be useful,
 | 
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 11 | # GNU General Public License for more details.
 | |
| 1887.1.1
by Adeodato Simó Do not separate paragraphs in the copyright statement with blank lines, | 12 | #
 | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 13 | # You should have received a copy of the GNU General Public License
 | 
| 14 | # along with this program; if not, write to the Free Software
 | |
| 4183.7.1
by Sabin Iacob update FSF mailing address | 15 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 16 | |
| 4237.3.1
by Jelmer Vernooij Add new module with generic serializer information; keep XML-specific bits in | 17 | from bzrlib.xml_serializer import ( | 
| 18 | Element, | |
| 19 | SubElement, | |
| 20 | XMLSerializer, | |
| 4416.5.1
by Jelmer Vernooij Move squashing of XML-invalid characters to XMLSerializer. | 21 | escape_invalid_chars, | 
| 4237.3.1
by Jelmer Vernooij Add new module with generic serializer information; keep XML-specific bits in | 22 |     )
 | 
| 5121.2.4
by Jelmer Vernooij Remove more unused imports. | 23 | from bzrlib.inventory import ROOT_ID, Inventory | 
| 1399.1.8
by Robert Collins factor out inventory directory logic into 'InventoryDirectory' class | 24 | import bzrlib.inventory as inventory | 
| 2817.2.1
by Robert Collins * Inventory serialisation no longer double-sha's the content. | 25 | from bzrlib.revision import Revision | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 26 | from bzrlib.errors import BzrError | 
| 27 | ||
| 28 | ||
| 4237.3.1
by Jelmer Vernooij Add new module with generic serializer information; keep XML-specific bits in | 29 | class _Serializer_v4(XMLSerializer): | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 30 | """Version 0.0.4 serializer | 
| 31 | ||
| 2817.2.1
by Robert Collins * Inventory serialisation no longer double-sha's the content. | 32 |     You should use the serializer_v4 singleton.
 | 
| 3943.8.1
by Marius Kruger remove all trailing whitespace from bzr source | 33 | |
| 2817.2.1
by Robert Collins * Inventory serialisation no longer double-sha's the content. | 34 |     v4 serialisation is no longer supported, only deserialisation.
 | 
| 35 |     """
 | |
| 3943.8.1
by Marius Kruger remove all trailing whitespace from bzr source | 36 | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 37 | __slots__ = [] | 
| 3943.8.1
by Marius Kruger remove all trailing whitespace from bzr source | 38 | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 39 | def _pack_entry(self, ie): | 
| 40 | """Convert InventoryEntry to XML element""" | |
| 41 | e = Element('entry') | |
| 42 | e.set('name', ie.name) | |
| 43 | e.set('file_id', ie.file_id) | |
| 44 | e.set('kind', ie.kind) | |
| 45 | ||
| 1963.2.6
by Robey Pointer pychecker is on crack; go back to using 'is None'. | 46 | if ie.text_size is not None: | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 47 | e.set('text_size', '%d' % ie.text_size) | 
| 48 | ||
| 1092.2.20
by Robert Collins symlink and weaves, whaddya know | 49 | for f in ['text_id', 'text_sha1', 'symlink_target']: | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 50 | v = getattr(ie, f) | 
| 1963.2.6
by Robey Pointer pychecker is on crack; go back to using 'is None'. | 51 | if v is not None: | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 52 | e.set(f, v) | 
| 53 | ||
| 54 |         # to be conservative, we don't externalize the root pointers
 | |
| 55 |         # for now, leaving them as null in the xml form.  in a future
 | |
| 56 |         # version it will be implied by nested elements.
 | |
| 57 | if ie.parent_id != ROOT_ID: | |
| 58 | e.set('parent_id', ie.parent_id) | |
| 59 | ||
| 60 | e.tail = '\n' | |
| 61 | ||
| 62 | return e | |
| 63 | ||
| 64 | ||
| 4849.4.2
by John Arbash Meinel Change from being a per-serializer attribute to being a per-repo attribute. | 65 | def _unpack_inventory(self, elt, revision_id=None, entry_cache=None, | 
| 66 | return_from_cache=False): | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 67 | """Construct from XML Element | 
| 2889.1.1
by Robert Collins * The class ``bzrlib.repofmt.knitrepo.KnitRepository3`` has been folded into | 68 | |
| 69 |         :param revision_id: Ignored parameter used by xml5.
 | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 70 |         """
 | 
| 71 | root_id = elt.get('file_id') or ROOT_ID | |
| 72 | inv = Inventory(root_id) | |
| 73 | for e in elt: | |
| 4849.4.2
by John Arbash Meinel Change from being a per-serializer attribute to being a per-repo attribute. | 74 | ie = self._unpack_entry(e, entry_cache=entry_cache, | 
| 75 | return_from_cache=return_from_cache) | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 76 | if ie.parent_id == ROOT_ID: | 
| 77 | ie.parent_id = root_id | |
| 78 | inv.add(ie) | |
| 79 | return inv | |
| 80 | ||
| 81 | ||
| 4849.4.2
by John Arbash Meinel Change from being a per-serializer attribute to being a per-repo attribute. | 82 | def _unpack_entry(self, elt, entry_cache=None, return_from_cache=False): | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 83 |         ## original format inventories don't have a parent_id for
 | 
| 84 |         ## nodes in the root directory, but it's cleaner to use one
 | |
| 85 |         ## internally.
 | |
| 86 | parent_id = elt.get('parent_id') | |
| 1963.2.6
by Robey Pointer pychecker is on crack; go back to using 'is None'. | 87 | if parent_id is None: | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 88 | parent_id = ROOT_ID | 
| 89 | ||
| 1399.1.8
by Robert Collins factor out inventory directory logic into 'InventoryDirectory' class | 90 | kind = elt.get('kind') | 
| 91 | if kind == 'directory': | |
| 92 | ie = inventory.InventoryDirectory(elt.get('file_id'), | |
| 93 | elt.get('name'), | |
| 94 | parent_id) | |
| 1399.1.9
by Robert Collins factor out file related logic from InventoryEntry to InventoryFile | 95 | elif kind == 'file': | 
| 96 | ie = inventory.InventoryFile(elt.get('file_id'), | |
| 97 | elt.get('name'), | |
| 98 | parent_id) | |
| 99 | ie.text_id = elt.get('text_id') | |
| 100 | ie.text_sha1 = elt.get('text_sha1') | |
| 101 | v = elt.get('text_size') | |
| 102 | ie.text_size = v and int(v) | |
| 1399.1.10
by Robert Collins remove kind from the InventoryEntry constructor - only child classes should be created now | 103 | elif kind == 'symlink': | 
| 104 | ie = inventory.InventoryLink(elt.get('file_id'), | |
| 105 | elt.get('name'), | |
| 106 | parent_id) | |
| 107 | ie.symlink_target = elt.get('symlink_target') | |
| 1399.1.8
by Robert Collins factor out inventory directory logic into 'InventoryDirectory' class | 108 | else: | 
| 1399.1.10
by Robert Collins remove kind from the InventoryEntry constructor - only child classes should be created now | 109 | raise BzrError("unknown kind %r" % kind) | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 110 | |
| 1185.31.4
by John Arbash Meinel Fixing mutter() calls to not have to do string processing. | 111 |         ## mutter("read inventoryentry: %r", elt.attrib)
 | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 112 | |
| 113 | return ie | |
| 114 | ||
| 115 | ||
| 116 | def _pack_revision(self, rev): | |
| 117 | """Revision object -> xml tree""" | |
| 118 | root = Element('revision', | |
| 119 | committer = rev.committer, | |
| 120 | timestamp = '%.9f' % rev.timestamp, | |
| 121 | revision_id = rev.revision_id, | |
| 122 | inventory_id = rev.inventory_id, | |
| 123 | inventory_sha1 = rev.inventory_sha1, | |
| 124 |                        )
 | |
| 125 | if rev.timezone: | |
| 126 | root.set('timezone', str(rev.timezone)) | |
| 127 | root.text = '\n' | |
| 128 | ||
| 129 | msg = SubElement(root, 'message') | |
| 4416.5.1
by Jelmer Vernooij Move squashing of XML-invalid characters to XMLSerializer. | 130 | msg.text = escape_invalid_chars(rev.message)[0] | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 131 | msg.tail = '\n' | 
| 132 | ||
| 133 | if rev.parents: | |
| 134 | pelts = SubElement(root, 'parents') | |
| 135 | pelts.tail = pelts.text = '\n' | |
| 1311
by Martin Pool - remove RevisionReference; just hold parent ids directly | 136 | for i, parent_id in enumerate(rev.parents): | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 137 | p = SubElement(pelts, 'revision_ref') | 
| 138 | p.tail = '\n' | |
| 1311
by Martin Pool - remove RevisionReference; just hold parent ids directly | 139 | p.set('revision_id', parent_id) | 
| 140 | if i < len(rev.parent_sha1s): | |
| 141 | p.set('revision_sha1', rev.parent_sha1s[i]) | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 142 | return root | 
| 143 | ||
| 3943.8.1
by Marius Kruger remove all trailing whitespace from bzr source | 144 | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 145 | def _unpack_revision(self, elt): | 
| 146 | """XML Element -> Revision object""" | |
| 3943.8.1
by Marius Kruger remove all trailing whitespace from bzr source | 147 | |
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 148 |         # <changeset> is deprecated...
 | 
| 149 | if elt.tag not in ('revision', 'changeset'): | |
| 150 | raise BzrError("unexpected tag in revision file: %r" % elt) | |
| 151 | ||
| 152 | rev = Revision(committer = elt.get('committer'), | |
| 153 | timestamp = float(elt.get('timestamp')), | |
| 154 | revision_id = elt.get('revision_id'), | |
| 155 | inventory_id = elt.get('inventory_id'), | |
| 156 | inventory_sha1 = elt.get('inventory_sha1') | |
| 157 |                        )
 | |
| 158 | ||
| 159 | precursor = elt.get('precursor') | |
| 160 | precursor_sha1 = elt.get('precursor_sha1') | |
| 161 | ||
| 162 | pelts = elt.find('parents') | |
| 163 | ||
| 164 | if pelts: | |
| 165 | for p in pelts: | |
| 1313
by Martin Pool - rename to Revision.parent_ids to avoid confusion with old usage | 166 | rev.parent_ids.append(p.get('revision_id')) | 
| 1311
by Martin Pool - remove RevisionReference; just hold parent ids directly | 167 | rev.parent_sha1s.append(p.get('revision_sha1')) | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 168 | if precursor: | 
| 169 |                 # must be consistent
 | |
| 1314
by Martin Pool - Fix up one more RevisionReference bit | 170 | prec_parent = rev.parent_ids[0] | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 171 | elif precursor: | 
| 172 |             # revisions written prior to 0.0.5 have a single precursor
 | |
| 173 |             # give as an attribute
 | |
| 1313
by Martin Pool - rename to Revision.parent_ids to avoid confusion with old usage | 174 | rev.parent_ids.append(precursor) | 
| 1311
by Martin Pool - remove RevisionReference; just hold parent ids directly | 175 | rev.parent_sha1s.append(precursor_sha1) | 
| 1297
by Martin Pool - split old xml v4 serialization into separate file | 176 | |
| 177 | v = elt.get('timezone') | |
| 178 | rev.timezone = v and int(v) | |
| 179 | ||
| 180 | rev.message = elt.findtext('message') # text of <message> | |
| 181 | return rev | |
| 182 | ||
| 183 | ||
| 184 | ||
| 185 | ||
| 186 | """singleton instance"""
 | |
| 187 | serializer_v4 = _Serializer_v4() | |
| 188 |