D4191: changegroup: define linknodes callbacks in generatefiles()
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Thu Aug 9 16:27:30 EDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGb83e9c503f2f: changegroup: define linknodes callbacks in generatefiles() (authored by indygreg, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4191?vs=10158&id=10180
REVISION DETAIL
https://phab.mercurial-scm.org/D4191
AFFECTED FILES
mercurial/changegroup.py
CHANGE DETAILS
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -819,19 +819,9 @@
mfs.clear()
clrevs = set(cl.rev(x) for x in clnodes)
- if not fastpathlinkrev:
- def linknodes(unused, fname):
- return fnodes.get(fname, {})
- else:
- cln = cl.node
- def linknodes(filerevlog, fname):
- llr = filerevlog.linkrev
- fln = filerevlog.node
- revs = ((r, llr(r)) for r in filerevlog)
- return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs)
-
- for chunk in self.generatefiles(changedfiles, linknodes, commonrevs,
- source, mfdicts):
+ for chunk in self.generatefiles(changedfiles, commonrevs,
+ source, mfdicts, fastpathlinkrev,
+ fnodes, clrevs):
yield chunk
yield self._close()
@@ -986,16 +976,28 @@
yield self._manifestsend
# The 'source' parameter is useful for extensions
- def generatefiles(self, changedfiles, linknodes, commonrevs, source,
- mfdicts):
+ def generatefiles(self, changedfiles, commonrevs, source,
+ mfdicts, fastpathlinkrev, fnodes, clrevs):
changedfiles = list(filter(self._filematcher, changedfiles))
+ if not fastpathlinkrev:
+ def normallinknodes(unused, fname):
+ return fnodes.get(fname, {})
+ else:
+ cln = self._repo.changelog.node
+
+ def normallinknodes(store, fname):
+ flinkrev = store.linkrev
+ fnode = store.node
+ revs = ((r, flinkrev(r)) for r in store)
+ return dict((fnode(r), cln(lr))
+ for r, lr in revs if lr in clrevs)
+
if self._isshallow:
# In a shallow clone, the linknodes callback needs to also include
# those file nodes that are in the manifests we sent but weren't
# introduced by those manifests.
commonctxs = [self._repo[c] for c in commonrevs]
- oldlinknodes = linknodes
clrev = self._repo.changelog.rev
# Defining this function has a side-effect of overriding the
@@ -1008,15 +1010,17 @@
self._clrevtolocalrev[c.rev()] = flog.rev(fnode)
except error.ManifestLookupError:
pass
- links = oldlinknodes(flog, fname)
+ links = normallinknodes(flog, fname)
if len(links) != len(mfdicts):
for mf, lr in mfdicts:
fnode = mf.get(fname, None)
if fnode in links:
links[fnode] = min(links[fnode], lr, key=clrev)
elif fnode:
links[fnode] = lr
return links
+ else:
+ linknodes = normallinknodes
return self._generatefiles(changedfiles, linknodes, commonrevs, source)
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list