mercurial/changegroup.py
changeset 38889 a06aab274aef
parent 38888 c9315bc578bc
child 38890 d706c77449f9
equal deleted inserted replaced
38888:c9315bc578bc 38889:a06aab274aef
   794         self._verbosenote(_('%8.i (manifests)\n') % size)
   794         self._verbosenote(_('%8.i (manifests)\n') % size)
   795         yield self._manifestsdone()
   795         yield self._manifestsdone()
   796 
   796 
   797     # The 'source' parameter is useful for extensions
   797     # The 'source' parameter is useful for extensions
   798     def generatefiles(self, changedfiles, linknodes, commonrevs, source):
   798     def generatefiles(self, changedfiles, linknodes, commonrevs, source):
       
   799         changedfiles = list(filter(self._filematcher, changedfiles))
       
   800 
       
   801         if getattr(self, 'is_shallow', False):
       
   802             # See comment in generate() for why this sadness is a thing.
       
   803             mfdicts = self._mfdicts
       
   804             del self._mfdicts
       
   805             # In a shallow clone, the linknodes callback needs to also include
       
   806             # those file nodes that are in the manifests we sent but weren't
       
   807             # introduced by those manifests.
       
   808             commonctxs = [self._repo[c] for c in commonrevs]
       
   809             oldlinknodes = linknodes
       
   810             clrev = self._repo.changelog.rev
       
   811 
       
   812             # Defining this function has a side-effect of overriding the
       
   813             # function of the same name that was passed in as an argument.
       
   814             # TODO have caller pass in appropriate function.
       
   815             def linknodes(flog, fname):
       
   816                 for c in commonctxs:
       
   817                     try:
       
   818                         fnode = c.filenode(fname)
       
   819                         self.clrev_to_localrev[c.rev()] = flog.rev(fnode)
       
   820                     except error.ManifestLookupError:
       
   821                         pass
       
   822                 links = oldlinknodes(flog, fname)
       
   823                 if len(links) != len(mfdicts):
       
   824                     for mf, lr in mfdicts:
       
   825                         fnode = mf.get(fname, None)
       
   826                         if fnode in links:
       
   827                             links[fnode] = min(links[fnode], lr, key=clrev)
       
   828                         elif fnode:
       
   829                             links[fnode] = lr
       
   830                 return links
       
   831 
       
   832         return self._generatefiles(changedfiles, linknodes, commonrevs, source)
       
   833 
       
   834     def _generatefiles(self, changedfiles, linknodes, commonrevs, source):
   799         repo = self._repo
   835         repo = self._repo
   800         progress = repo.ui.makeprogress(_('bundling'), unit=_('files'),
   836         progress = repo.ui.makeprogress(_('bundling'), unit=_('files'),
   801                                         total=len(changedfiles))
   837                                         total=len(changedfiles))
   802         for i, fname in enumerate(sorted(changedfiles)):
   838         for i, fname in enumerate(sorted(changedfiles)):
   803             filerevlog = repo.file(fname)
   839             filerevlog = repo.file(fname)