Mercurial > public > mercurial-scm > hg
diff mercurial/match.py @ 41528:b7a0efb3c370
match: teach diffmatcher.visitdir() to return 'all' if possible
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.
Differential Revision: https://phab.mercurial-scm.org/D5814
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Mon, 04 Feb 2019 18:14:03 +0300 |
parents | 4fab8a7d2d72 |
children | 635a12c53ea6 |
line wrap: on
line diff
--- a/mercurial/match.py Sun Feb 03 10:01:43 2019 +0100 +++ b/mercurial/match.py Mon Feb 04 18:14:03 2019 +0300 @@ -677,6 +677,9 @@ def visitdir(self, dir): if self._m2.visitdir(dir) == 'all': return False + elif not self._m2.visitdir(dir): + # m2 does not match dir, we can return 'all' here if possible + return self._m1.visitdir(dir) return bool(self._m1.visitdir(dir)) def visitchildrenset(self, dir):