mercurial/changegroup.py
changeset 39007 39f5c7afdc25
parent 39006 5959ef78d834
child 39008 8c84f1ef949e
equal deleted inserted replaced
39006:5959ef78d834 39007:39f5c7afdc25
    24 )
    24 )
    25 
    25 
    26 from . import (
    26 from . import (
    27     dagutil,
    27     dagutil,
    28     error,
    28     error,
    29     manifest,
       
    30     match as matchmod,
    29     match as matchmod,
    31     mdiff,
    30     mdiff,
    32     phases,
    31     phases,
    33     pycompat,
    32     pycompat,
    34     repository,
    33     repository,
   822         if progress:
   821         if progress:
   823             progress.complete()
   822             progress.complete()
   824 
   823 
   825         yield closechunk()
   824         yield closechunk()
   826 
   825 
   827     # filter any nodes that claim to be part of the known set
       
   828     def _prune(self, store, missing, commonrevs):
       
   829         # TODO this violates storage abstraction for manifests.
       
   830         if isinstance(store, manifest.manifestrevlog):
       
   831             if not self._filematcher.visitdir(store._dir[:-1] or '.'):
       
   832                 return []
       
   833 
       
   834         rr, rl = store.rev, store.linkrev
       
   835         return [n for n in missing if rl(rr(n)) not in commonrevs]
       
   836 
       
   837     def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
   826     def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
   838         """Yield a sequence of changegroup byte chunks."""
   827         """Yield a sequence of changegroup byte chunks."""
   839 
   828 
   840         repo = self._repo
   829         repo = self._repo
   841         cl = repo.changelog
   830         cl = repo.changelog
  1029 
  1018 
  1030         size = 0
  1019         size = 0
  1031         while tmfnodes:
  1020         while tmfnodes:
  1032             dir, nodes = tmfnodes.popitem()
  1021             dir, nodes = tmfnodes.popitem()
  1033             store = dirlog(dir)
  1022             store = dirlog(dir)
  1034             prunednodes = self._prune(store, nodes, commonrevs)
  1023 
       
  1024             if not self._filematcher.visitdir(store._dir[:-1] or '.'):
       
  1025                 prunednodes = []
       
  1026             else:
       
  1027                 frev, flr = store.rev, store.linkrev
       
  1028                 prunednodes = [n for n in nodes
       
  1029                                if flr(frev(n)) not in commonrevs]
  1035 
  1030 
  1036             if dir and not prunednodes:
  1031             if dir and not prunednodes:
  1037                 continue
  1032                 continue
  1038 
  1033 
  1039             lookupfn = makelookupmflinknode(dir, nodes)
  1034             lookupfn = makelookupmflinknode(dir, nodes)
  1125             # Lookup for filenodes, we collected the linkrev nodes above in the
  1120             # Lookup for filenodes, we collected the linkrev nodes above in the
  1126             # fastpath case and with lookupmf in the slowpath case.
  1121             # fastpath case and with lookupmf in the slowpath case.
  1127             def lookupfilelog(x):
  1122             def lookupfilelog(x):
  1128                 return linkrevnodes[x]
  1123                 return linkrevnodes[x]
  1129 
  1124 
  1130             filenodes = self._prune(filerevlog, linkrevnodes, commonrevs)
  1125             frev, flr = filerevlog.rev, filerevlog.linkrev
       
  1126             filenodes = [n for n in linkrevnodes
       
  1127                          if flr(frev(n)) not in commonrevs]
       
  1128 
  1131             if filenodes:
  1129             if filenodes:
  1132                 if self._ellipses:
  1130                 if self._ellipses:
  1133                     revs = _sortnodesellipsis(filerevlog, filenodes,
  1131                     revs = _sortnodesellipsis(filerevlog, filenodes,
  1134                                               cl, lookupfilelog)
  1132                                               cl, lookupfilelog)
  1135                 else:
  1133                 else: