bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 3311.3.4
by Aaron Bentley Have xml5 inherit from xml6 from xml8 | 1 | # Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
 | 
| 2 | #
 | |
| 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.
 | |
| 7 | #
 | |
| 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.
 | |
| 12 | #
 | |
| 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
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 16 | ||
| 17 | from bzrlib import ( | |
| 18 | cache_utf8, | |
| 19 | inventory, | |
| 20 | xml6, | |
| 21 | xml8, | |
| 22 |     )
 | |
| 23 | ||
| 24 | class Serializer_v5(xml6.Serializer_v6): | |
| 25 | """Version 5 serializer | |
| 26 | ||
| 27 |     Packs objects into XML and vice versa.
 | |
| 28 |     """
 | |
| 29 | format_num = '5' | |
| 30 | root_id = inventory.ROOT_ID | |
| 31 | ||
| 32 | def _unpack_inventory(self, elt, revision_id): | |
| 33 | """Construct from XML Element | |
| 34 |         """
 | |
| 35 | root_id = elt.get('file_id') or inventory.ROOT_ID | |
| 36 | root_id = xml8._get_utf8_or_ascii(root_id) | |
| 37 | ||
| 38 | format = elt.get('format') | |
| 39 | if format is not None: | |
| 40 | if format != '5': | |
| 41 | raise BzrError("invalid format version %r on inventory" | |
| 42 | % format) | |
| 43 | data_revision_id = elt.get('revision_id') | |
| 44 | if data_revision_id is not None: | |
| 45 | revision_id = cache_utf8.encode(data_revision_id) | |
| 46 | inv = inventory.Inventory(root_id, revision_id=revision_id) | |
| 47 | for e in elt: | |
| 48 | ie = self._unpack_entry(e) | |
| 49 | if ie.parent_id is None: | |
| 50 | ie.parent_id = root_id | |
| 51 | inv.add(ie) | |
| 52 | if revision_id is not None: | |
| 53 | inv.root.revision = revision_id | |
| 54 | return inv | |
| 55 | ||
| 56 | def _check_revisions(self, inv): | |
| 57 | """Extension point for subclasses to check during serialisation. | |
| 58 | ||
| 59 |         In this version, no checking is done.
 | |
| 60 | ||
| 61 |         :param inv: An inventory about to be serialised, to be checked.
 | |
| 62 |         :raises: AssertionError if an error has occured.
 | |
| 63 |         """
 | |
| 64 | ||
| 65 | def _append_inventory_root(self, append, inv): | |
| 66 | """Append the inventory root to output.""" | |
| 67 | if inv.root.file_id not in (None, inventory.ROOT_ID): | |
| 68 | fileid1 = ' file_id="' | |
| 69 | fileid2 = xml8._encode_and_escape(inv.root.file_id) | |
| 70 | else: | |
| 71 | fileid1 = "" | |
| 72 | fileid2 = "" | |
| 73 | if inv.revision_id is not None: | |
| 74 | revid1 = ' revision_id="' | |
| 75 | revid2 = xml8._encode_and_escape(inv.revision_id) | |
| 76 | else: | |
| 77 | revid1 = "" | |
| 78 | revid2 = "" | |
| 79 | append('<inventory%s%s format="5"%s%s>\n' % ( | |
| 80 | fileid1, fileid2, revid1, revid2)) | |
| 81 | ||
| 82 | ||
| 83 | serializer_v5 = Serializer_v5() |