This is an archive of the discontinued Mercurial Phabricator instance.

match: teach diffmatcher.visitdir() to return 'all' if possible
ClosedPublic

Authored by pulkit on Feb 4 2019, 10:14 AM.

Details

Summary

This patch teaches differencematcher.visitdir() to return 'all' when
m1.visitdir() returns 'all' and m2 does not matches.

Before this patch, from a differencematcher.visitdir(), we always returned
either True or False. We never returned 'all' even when we can. This causes
problem when m1 and m2 of a differencematcher are themselves differencematcher.
In that case, we try to check:

if self._m2_.visitdir(dir) == 'all'

which will never be 'all' even though it can be.

This leads to iterating over a lot of sub-directory manifest, even though we
don't want to while extending a narrow clone. I am yet to measure the impact of
this but calculating manifest was taking ~50-60 seconds, so this should
definitely save some of time there.

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

pulkit created this revision.Feb 4 2019, 10:14 AM
pulkit updated this revision to Diff 13740.Feb 4 2019, 10:16 AM
martinvonz accepted this revision.Feb 4 2019, 11:27 AM
martinvonz added a subscriber: martinvonz.

Thanks for fixing! I don't know why I didn't think of writing it this way from the beginning :P

This revision is now accepted and ready to land.Feb 4 2019, 11:27 AM
This revision was automatically updated to reflect the committed changes.