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) |