HomePhabricator

copies: filter out copies from non-existent source later in _chain()

Authored by martinvonz.

Description

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