copies: filter out copies from non-existent source later in _chain()
_changesetforwardcopies() repeatedly calls _chain(). That is very
expensive because _chain() does lookups in the manifest. I hope to
split up the function in two parts: 1) simple chaining, not
considering end points, and 2) filter out files that don't exist in
the end points (and ping-pong copies/renames).
This patches gets us closer to that by moving the check for
non-existent source later in the function. Now there are no more
checks for "src" and "dst" in the first loop; all the filtering of
invalid copies is done in the second loop. The code also looks much
more consistent now.
No measureable impact on `hg debugpathcopies 4.0 4.8`. That shouldn't
be surprising since the only case we're doing more checks now is in
case of chained copies/renames, which are quire rare in practice.
Differential Revision: https://phab.mercurial-scm.org/D6277
from __future__ import absolute_import
from mercurial.i18n import _
from mercurial import (
hg,
registrar,
)
cmdtable = {}
command = registrar.command(cmdtable)
@command(b'getflogheads',
[],
b'path')
def getflogheads(ui, repo, path):
"""
Extension printing a remotefilelog's heads
Used for testing purpose
"""
dest = repo.ui.expandpath(b'default')
peer = hg.peer(repo, {}, dest)
flogheads = peer.x_rfl_getflogheads(path)
if flogheads:
for head in flogheads:
ui.write(head + b'\n')
else:
ui.write(_(b'EMPTY\n'))