예제 #1
0
    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))
예제 #2
0
 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()
예제 #3
0
 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)
예제 #4
0
    def drop_revprops(self, revnum):
        """See LogCache.drop_revprops."""

        self.db[b"revprops/%d" % revnum] = bencode.bencode({})