hgext/remotefilelog/shallowbundle.py
changeset 47055 d55b71393907
parent 46847 47a9527731c3
child 47348 3f00665bbea0
equal deleted inserted replaced
46992:5fa019ceb499 47055:d55b71393907
     5 # This software may be used and distributed according to the terms of the
     5 # This software may be used and distributed according to the terms of the
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 from __future__ import absolute_import
     7 from __future__ import absolute_import
     8 
     8 
     9 from mercurial.i18n import _
     9 from mercurial.i18n import _
    10 from mercurial.node import bin, hex, nullid
    10 from mercurial.node import bin, hex
    11 from mercurial import (
    11 from mercurial import (
    12     bundlerepo,
    12     bundlerepo,
    13     changegroup,
    13     changegroup,
    14     error,
    14     error,
    15     match,
    15     match,
   141                 results.append(fnode)
   141                 results.append(fnode)
   142         return results
   142         return results
   143 
   143 
   144     def nodechunk(self, revlog, node, prevnode, linknode):
   144     def nodechunk(self, revlog, node, prevnode, linknode):
   145         prefix = b''
   145         prefix = b''
   146         if prevnode == nullid:
   146         if prevnode == revlog.nullid:
   147             delta = revlog.rawdata(node)
   147             delta = revlog.rawdata(node)
   148             prefix = mdiff.trivialdiffheader(len(delta))
   148             prefix = mdiff.trivialdiffheader(len(delta))
   149         else:
   149         else:
   150             # Actually uses remotefilelog.revdiff which works on nodes, not revs
   150             # Actually uses remotefilelog.revdiff which works on nodes, not revs
   151             delta = revlog.revdiff(prevnode, node)
   151             delta = revlog.revdiff(prevnode, node)
   243             raise error.Abort(_(b"received file revlog group is empty"))
   243             raise error.Abort(_(b"received file revlog group is empty"))
   244 
   244 
   245     processed = set()
   245     processed = set()
   246 
   246 
   247     def available(f, node, depf, depnode):
   247     def available(f, node, depf, depnode):
   248         if depnode != nullid and (depf, depnode) not in processed:
   248         if depnode != repo.nullid and (depf, depnode) not in processed:
   249             if not (depf, depnode) in revisiondatas:
   249             if not (depf, depnode) in revisiondatas:
   250                 # It's not in the changegroup, assume it's already
   250                 # It's not in the changegroup, assume it's already
   251                 # in the repo
   251                 # in the repo
   252                 return True
   252                 return True
   253             # re-add self to queue
   253             # re-add self to queue
   265         revisiondata = revisiondatas[(f, node)]
   265         revisiondata = revisiondatas[(f, node)]
   266         # revisiondata: (node, p1, p2, cs, deltabase, delta, flags)
   266         # revisiondata: (node, p1, p2, cs, deltabase, delta, flags)
   267         dependents = [revisiondata[1], revisiondata[2], revisiondata[4]]
   267         dependents = [revisiondata[1], revisiondata[2], revisiondata[4]]
   268 
   268 
   269         for dependent in dependents:
   269         for dependent in dependents:
   270             if dependent == nullid or (f, dependent) in revisiondatas:
   270             if dependent == repo.nullid or (f, dependent) in revisiondatas:
   271                 continue
   271                 continue
   272             prefetchfiles.append((f, hex(dependent)))
   272             prefetchfiles.append((f, hex(dependent)))
   273 
   273 
   274     repo.fileservice.prefetch(prefetchfiles)
   274     repo.fileservice.prefetch(prefetchfiles)
   275 
   275 
   304             copynode = bin(meta[b'copyrev'])
   304             copynode = bin(meta[b'copyrev'])
   305             if not available(f, node, copyfrom, copynode):
   305             if not available(f, node, copyfrom, copynode):
   306                 continue
   306                 continue
   307 
   307 
   308         for p in [p1, p2]:
   308         for p in [p1, p2]:
   309             if p != nullid:
   309             if p != repo.nullid:
   310                 if not available(f, node, f, p):
   310                 if not available(f, node, f, p):
   311                     continue
   311                     continue
   312 
   312 
   313         fl.add(text, meta, trp, linknode, p1, p2)
   313         fl.add(text, meta, trp, linknode, p1, p2)
   314         processed.add((f, node))
   314         processed.add((f, node))