pulloperation instances were recently taught to record file
include and exclude patterns to facilitate narrow file transfer.
Teaching the exchangev2 code to transfer a subset of files is
as simple as constructing a narrow matcher from these patterns and
filtering all seen file paths through it.
In addition to testing presence of revlogs, we also test for presence
of copy/rename metadata when the source revision is outside the
narrow spec. This verifes that our narrow filelog class is working
properly.
Keep in mind that this change only influences file data: we're
still fetching all changeset and manifest data. So, there's still
a ton of "partial clone" to implement in exchangev2.
On a personal note, I derive gratification that this feature requires
very few lines of new code to implement. And notably, none of those
lines influence the parameters sent to the server: the client just
requests less repository data than it did before.