copies: inline _computenonoverlap() in mergecopies()
We now call pathcopies() from the base to each of the commits, and
that calls _computeforwardmissing(), which does file prefetching (in
the remotefilelog override). So the call to _computenonoverlap() is
now pointless (the sets of files from _computenonoverlap() are subsets
of the sets of files from _computeforwardmissing()).
This somehow also fixes a broken remotefilelog test.
Differential Revision: https://phab.mercurial-scm.org/D6256
--- a/hgext/remotefilelog/__init__.py Thu Apr 11 23:22:54 2019 -0700
+++ b/hgext/remotefilelog/__init__.py Fri Apr 12 10:44:37 2019 -0700
@@ -487,37 +487,6 @@
return orig(repo, matcher, added, removed, *args, **kwargs)
extensions.wrapfunction(scmutil, '_findrenames', findrenames)
- # prefetch files before mergecopies check
- def computenonoverlap(orig, repo, c1, c2, *args, **kwargs):
- u1, u2 = orig(repo, c1, c2, *args, **kwargs)
- if isenabled(repo):
- m1 = c1.manifest()
- m2 = c2.manifest()
- files = []
-
- sparsematch1 = repo.maybesparsematch(c1.rev())
- if sparsematch1:
- sparseu1 = set()
- for f in u1:
- if sparsematch1(f):
- files.append((f, hex(m1[f])))
- sparseu1.add(f)
- u1 = sparseu1
-
- sparsematch2 = repo.maybesparsematch(c2.rev())
- if sparsematch2:
- sparseu2 = set()
- for f in u2:
- if sparsematch2(f):
- files.append((f, hex(m2[f])))
- sparseu2.add(f)
- u2 = sparseu2
-
- # batch fetch the needed files from the server
- repo.fileservice.prefetch(files)
- return u1, u2
- extensions.wrapfunction(copies, '_computenonoverlap', computenonoverlap)
-
# prefetch files before pathcopies check
def computeforwardmissing(orig, a, b, match=None):
missing = orig(a, b, match=match)
--- a/mercurial/copies.py Thu Apr 11 23:22:54 2019 -0700
+++ b/mercurial/copies.py Fri Apr 12 10:44:37 2019 -0700
@@ -353,26 +353,6 @@
return _chain(x, y, _backwardrenames(x, a, match=match),
_forwardcopies(a, y, match=match))
-def _computenonoverlap(repo, c1, c2, addedinm1, addedinm2, debug=True):
- """Computes, based on addedinm1 and addedinm2, the files exclusive to c1
- and c2. This is its own function so extensions can easily wrap this call
- to see what files mergecopies is about to process.
-
- Even though c1 and c2 are not used in this function, they are useful in
- other extensions for being able to read the file nodes of the changed files.
- """
- u1 = sorted(addedinm1 - addedinm2)
- u2 = sorted(addedinm2 - addedinm1)
-
- if debug:
- header = " unmatched files in %s"
- if u1:
- repo.ui.debug("%s:\n %s\n" % (header % 'local', "\n ".join(u1)))
- if u2:
- repo.ui.debug("%s:\n %s\n" % (header % 'other', "\n ".join(u2)))
-
- return u1, u2
-
def mergecopies(repo, c1, c2, base):
"""
Finds moves and copies between context c1 and c2 that are relevant for
@@ -555,7 +535,14 @@
# find interesting file sets from manifests
addedinm1 = m1.filesnotin(mb, repo.narrowmatch())
addedinm2 = m2.filesnotin(mb, repo.narrowmatch())
- u1, u2 = _computenonoverlap(repo, c1, c2, addedinm1, addedinm2)
+ u1 = sorted(addedinm1 - addedinm2)
+ u2 = sorted(addedinm2 - addedinm1)
+
+ header = " unmatched files in %s"
+ if u1:
+ repo.ui.debug("%s:\n %s\n" % (header % 'local', "\n ".join(u1)))
+ if u2:
+ repo.ui.debug("%s:\n %s\n" % (header % 'other', "\n ".join(u2)))
fullcopy = copies1.copy()
fullcopy.update(copies2)
--- a/tests/test-remotefilelog-sparse.t Thu Apr 11 23:22:54 2019 -0700
+++ b/tests/test-remotefilelog-sparse.t Fri Apr 12 10:44:37 2019 -0700
@@ -98,12 +98,5 @@
$ clearcache
$ hg prefetch -r '. + .^' -I x -I z
4 files fetched over 1 fetches - (4 misses, 0.00% hit ratio) over * (glob)
-Originally this was testing that the rebase doesn't fetch pointless
-blobs. Right now it fails because core's sparse can't load a spec from
-the working directory. Presumably there's a fix, but I'm not sure what it is.
$ hg rebase -d 2 --keep
rebasing 1:876b1317060d "x2" (foo)
- transaction abort!
- rollback completed
- abort: cannot parse sparse patterns from working directory
- [255]