##// END OF EJS Templates
changegroup: define linknodes callbacks in generatefiles()...
Gregory Szorc -
r39035:b83e9c50 default
parent child Browse files
Show More
@@ -819,19 +819,9 b' class cgpacker(object):'
819 819 mfs.clear()
820 820 clrevs = set(cl.rev(x) for x in clnodes)
821 821
822 if not fastpathlinkrev:
823 def linknodes(unused, fname):
824 return fnodes.get(fname, {})
825 else:
826 cln = cl.node
827 def linknodes(filerevlog, fname):
828 llr = filerevlog.linkrev
829 fln = filerevlog.node
830 revs = ((r, llr(r)) for r in filerevlog)
831 return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs)
832
833 for chunk in self.generatefiles(changedfiles, linknodes, commonrevs,
834 source, mfdicts):
822 for chunk in self.generatefiles(changedfiles, commonrevs,
823 source, mfdicts, fastpathlinkrev,
824 fnodes, clrevs):
835 825 yield chunk
836 826
837 827 yield self._close()
@@ -986,16 +976,28 b' class cgpacker(object):'
986 976 yield self._manifestsend
987 977
988 978 # The 'source' parameter is useful for extensions
989 def generatefiles(self, changedfiles, linknodes, commonrevs, source,
990 mfdicts):
979 def generatefiles(self, changedfiles, commonrevs, source,
980 mfdicts, fastpathlinkrev, fnodes, clrevs):
991 981 changedfiles = list(filter(self._filematcher, changedfiles))
992 982
983 if not fastpathlinkrev:
984 def normallinknodes(unused, fname):
985 return fnodes.get(fname, {})
986 else:
987 cln = self._repo.changelog.node
988
989 def normallinknodes(store, fname):
990 flinkrev = store.linkrev
991 fnode = store.node
992 revs = ((r, flinkrev(r)) for r in store)
993 return dict((fnode(r), cln(lr))
994 for r, lr in revs if lr in clrevs)
995
993 996 if self._isshallow:
994 997 # In a shallow clone, the linknodes callback needs to also include
995 998 # those file nodes that are in the manifests we sent but weren't
996 999 # introduced by those manifests.
997 1000 commonctxs = [self._repo[c] for c in commonrevs]
998 oldlinknodes = linknodes
999 1001 clrev = self._repo.changelog.rev
1000 1002
1001 1003 # Defining this function has a side-effect of overriding the
@@ -1008,7 +1010,7 b' class cgpacker(object):'
1008 1010 self._clrevtolocalrev[c.rev()] = flog.rev(fnode)
1009 1011 except error.ManifestLookupError:
1010 1012 pass
1011 links = oldlinknodes(flog, fname)
1013 links = normallinknodes(flog, fname)
1012 1014 if len(links) != len(mfdicts):
1013 1015 for mf, lr in mfdicts:
1014 1016 fnode = mf.get(fname, None)
@@ -1017,6 +1019,8 b' class cgpacker(object):'
1017 1019 elif fnode:
1018 1020 links[fnode] = lr
1019 1021 return links
1022 else:
1023 linknodes = normallinknodes
1020 1024
1021 1025 return self._generatefiles(changedfiles, linknodes, commonrevs, source)
1022 1026
General Comments 0
You need to be logged in to leave comments. Login now