mercurial/changegroup.py
changeset 35012 d80380ba8e7d
parent 34734 3572b2031cec
child 35754 fb0be099063f
equal deleted inserted replaced
35011:a2dfc723b6b5 35012:d80380ba8e7d
   690         tmfnodes = {'': mfs}
   690         tmfnodes = {'': mfs}
   691 
   691 
   692         # Callback for the manifest, used to collect linkrevs for filelog
   692         # Callback for the manifest, used to collect linkrevs for filelog
   693         # revisions.
   693         # revisions.
   694         # Returns the linkrev node (collected in lookupcl).
   694         # Returns the linkrev node (collected in lookupcl).
   695         def makelookupmflinknode(dir):
   695         def makelookupmflinknode(dir, nodes):
   696             if fastpathlinkrev:
   696             if fastpathlinkrev:
   697                 assert not dir
   697                 assert not dir
   698                 return mfs.__getitem__
   698                 return mfs.__getitem__
   699 
   699 
   700             def lookupmflinknode(x):
   700             def lookupmflinknode(x):
   711 
   711 
   712                 Note that this means manifests must be completely sent to
   712                 Note that this means manifests must be completely sent to
   713                 the client before you can trust the list of files and
   713                 the client before you can trust the list of files and
   714                 treemanifests to send.
   714                 treemanifests to send.
   715                 """
   715                 """
   716                 clnode = tmfnodes[dir][x]
   716                 clnode = nodes[x]
   717                 mdata = mfl.get(dir, x).readfast(shallow=True)
   717                 mdata = mfl.get(dir, x).readfast(shallow=True)
   718                 for p, n, fl in mdata.iterentries():
   718                 for p, n, fl in mdata.iterentries():
   719                     if fl == 't': # subdirectory manifest
   719                     if fl == 't': # subdirectory manifest
   720                         subdir = dir + p + '/'
   720                         subdir = dir + p + '/'
   721                         tmfclnodes = tmfnodes.setdefault(subdir, {})
   721                         tmfclnodes = tmfnodes.setdefault(subdir, {})
   731                 return clnode
   731                 return clnode
   732             return lookupmflinknode
   732             return lookupmflinknode
   733 
   733 
   734         size = 0
   734         size = 0
   735         while tmfnodes:
   735         while tmfnodes:
   736             dir = min(tmfnodes)
   736             dir, nodes = tmfnodes.popitem()
   737             nodes = tmfnodes[dir]
       
   738             prunednodes = self.prune(dirlog(dir), nodes, commonrevs)
   737             prunednodes = self.prune(dirlog(dir), nodes, commonrevs)
   739             if not dir or prunednodes:
   738             if not dir or prunednodes:
   740                 for x in self._packmanifests(dir, prunednodes,
   739                 for x in self._packmanifests(dir, prunednodes,
   741                                              makelookupmflinknode(dir)):
   740                                              makelookupmflinknode(dir, nodes)):
   742                     size += len(x)
   741                     size += len(x)
   743                     yield x
   742                     yield x
   744             del tmfnodes[dir]
       
   745         self._verbosenote(_('%8.i (manifests)\n') % size)
   743         self._verbosenote(_('%8.i (manifests)\n') % size)
   746         yield self._manifestsdone()
   744         yield self._manifestsdone()
   747 
   745 
   748     # The 'source' parameter is useful for extensions
   746     # The 'source' parameter is useful for extensions
   749     def generatefiles(self, changedfiles, linknodes, commonrevs, source):
   747     def generatefiles(self, changedfiles, linknodes, commonrevs, source):