def insert_revprops(self, revision, revprops, all_revprops): """See LogCache.insert_revprops.""" if revprops is None: revprops = {} revprops = {key.encode('utf-8'): value for (key, value) in revprops.items()} self.db[b"revprops/%d" % revision] = bencode.bencode((revprops, all_revprops))
def insert_paths(self, rev, orig_paths, revprops, all_revprops): """See LogCache.insert_paths.""" self.db.transaction_start() try: self.insert_revprops(rev, revprops, all_revprops) if orig_paths is None: orig_paths = {} new_paths = {} for p in orig_paths: v = orig_paths[p] copyfrom_path = v[1] if copyfrom_path is not None: copyfrom_path = copyfrom_path.strip("/").encode('utf-8') else: copyfrom_path = b"" assert orig_paths[p][2] == -1 try: kind = v[3] except IndexError: kind = NODE_UNKNOWN new_paths[p.strip(u"/").encode('utf-8')] = (v[0], copyfrom_path, v[2], kind) self.db[b"paths/%d" % rev] = bencode.bencode(new_paths) min_revnum = self.min_revnum() if min_revnum is None: min_revnum = rev else: min_revnum = min(min_revnum, rev) self.db[b"log-min"] = str(min_revnum) self.db[b"log-last"] = str(max(self.max_revnum(), rev)) except: self.db.transaction_cancel() raise else: self.db.transaction_commit()
def export_revision(self, rev, lossy=True, fileids={}): user = rev.committer time = rev.timestamp timezone = -rev.timezone extra = {} manifest = None for name, value in rev.properties.iteritems(): if name == 'manifest': manifest = mercurial.node.bin(value) elif name.startswith("hg:extra:"): extra[name[len("hg:extra:"):]] = base64.b64decode(value) elif name == 'rebase-of': try: hgid, mapping = self.revision_id_bzr_to_foreign(value) except errors.InvalidRevisionId: extra["bzr-revprop-" + name] = value.encode("utf-8") else: assert len(hgid) == 20 extra['rebase_source'] = mercurial.node.hex(hgid) elif name == 'converted-from': if value.count('\n') <= 1: continue extra['convert_revision'] = generate_convert_revision( value.splitlines()[-2]) else: assert not ":" in name extra["bzr-revprop-" + name] = value.encode("utf-8") if not lossy and not rev.revision_id.startswith(self.revid_prefix + ":"): extra["bzr-mapping"] = str(self) extra["bzr-revision-id"] = rev.revision_id if len(rev.parent_ids) > 2: extra["bzr-extra-parents"] = " ".join(rev.parent_ids[2:]) if fileids: extra["bzr-fileids"] = bencode.bencode(sorted(fileids.items())) desc = rev.message return (manifest, user, (time, timezone), desc, extra)
def drop_revprops(self, revnum): """See LogCache.drop_revprops.""" self.db[b"revprops/%d" % revnum] = bencode.bencode({})