def set_parent_ids(self, revision_ids, allow_leftmost_as_ghost=False): """See MutableTree.set_parent_trees().""" for revision_id in revision_ids: _mod_revision.check_not_reserved_id(revision_id) if len(revision_ids) == 0: self._parent_ids = [] self._branch_revision_id = _mod_revision.NULL_REVISION else: self._parent_ids = revision_ids self._branch_revision_id = revision_ids[0] self._allow_leftmost_as_ghost = allow_leftmost_as_ghost self._set_basis()
def _add_inventory(self, revision_id, inv, parents, parent_invs): """See RevisionStore._add_inventory.""" # Code taken from bzrlib.repository.add_inventory assert self.repo.is_in_write_group() _mod_revision.check_not_reserved_id(revision_id) assert inv.revision_id is None or inv.revision_id == revision_id, \ "Mismatch between inventory revision" \ " id and insertion revid (%r, %r)" % (inv.revision_id, revision_id) assert inv.root is not None inv_lines = self.repo._serialise_inventory_to_lines(inv) inv_vf = self.repo.get_inventory_weave() sha1, num_bytes, parent_text = self._inventory_add_lines(inv_vf, revision_id, parents, inv_lines, self.inv_parent_texts) self.inv_parent_texts[revision_id] = parent_text return sha1
def _pack_revision(self, rev): """Revision object -> xml tree""" # For the XML format, we need to write them as Unicode rather than as # utf-8 strings. So that cElementTree can handle properly escaping # them. decode_utf8 = cache_utf8.decode revision_id = rev.revision_id if isinstance(revision_id, str): revision_id = decode_utf8(revision_id) format_num = self.format_num if self.revision_format_num is not None: format_num = self.revision_format_num root = Element( 'revision', committer=rev.committer, timestamp='%.3f' % rev.timestamp, revision_id=revision_id, inventory_sha1=rev.inventory_sha1, format=format_num, ) if rev.timezone is not None: root.set('timezone', str(rev.timezone)) root.text = '\n' msg = SubElement(root, 'message') msg.text = rev.message msg.tail = '\n' if rev.parent_ids: pelts = SubElement(root, 'parents') pelts.tail = pelts.text = '\n' for parent_id in rev.parent_ids: _mod_revision.check_not_reserved_id(parent_id) p = SubElement(pelts, 'revision_ref') p.tail = '\n' if isinstance(parent_id, str): parent_id = decode_utf8(parent_id) p.set('revision_id', parent_id) if rev.properties: self._pack_revision_properties(rev, root) return root
def _pack_revision(self, rev): """Revision object -> xml tree""" # For the XML format, we need to write them as Unicode rather than as # utf-8 strings. So that cElementTree can handle properly escaping # them. decode_utf8 = cache_utf8.decode revision_id = rev.revision_id if isinstance(revision_id, str): revision_id = decode_utf8(revision_id) format_num = self.format_num if self.revision_format_num is not None: format_num = self.revision_format_num root = Element('revision', committer = rev.committer, timestamp = '%.3f' % rev.timestamp, revision_id = revision_id, inventory_sha1 = rev.inventory_sha1, format=format_num, ) if rev.timezone is not None: root.set('timezone', str(rev.timezone)) root.text = '\n' msg = SubElement(root, 'message') msg.text = rev.message msg.tail = '\n' if rev.parent_ids: pelts = SubElement(root, 'parents') pelts.tail = pelts.text = '\n' for parent_id in rev.parent_ids: _mod_revision.check_not_reserved_id(parent_id) p = SubElement(pelts, 'revision_ref') p.tail = '\n' if isinstance(parent_id, str): parent_id = decode_utf8(parent_id) p.set('revision_id', parent_id) if rev.properties: self._pack_revision_properties(rev, root) return root
def _add_revision(self, rev, inv): # There's no need to do everything repo.add_revision does and # doing so (since bzr.dev 3392) can be pretty slow for long # delta chains on inventories. Just do the essentials here ... _mod_revision.check_not_reserved_id(rev.revision_id) self.repo._revision_store.add_revision(rev, self.repo.get_transaction())