On Sat, 25 Nov 2017 23:53:45 -0500, Matt Harbison wrote: > On Sat, 25 Nov 2017 02:35:04 -0500, Yuya Nishihara <y...@tcha.org> wrote: > > > # HG changeset patch > > # User Yuya Nishihara <y...@tcha.org> > > # Date 1511593310 -32400 > > # Sat Nov 25 16:01:50 2017 +0900 > > # Node ID b6e526ee5d2662ca30a555ca51264b3e371fe44e > > # Parent 38e952030f0c4746257280d47f0f94b6cb9ddb41 > > cat: do not instantiate subrepo if no potential match in it > > > > This fixes the test failure in hg-git. > > > > https://bitbucket.org/durin42/hg-git/issues/227/ > > > > diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py > > --- a/mercurial/cmdutil.py > > +++ b/mercurial/cmdutil.py > > @@ -3068,6 +3068,8 @@ def cat(ui, repo, ctx, matcher, basefm, > > err = 0 > > for subpath in sorted(ctx.substate): > > + if not matcher.visitdir(subpath): > > + continue > > The basematcher contract says the result is undefined if False is returned > for any parent directory. Do we need a subrepo utility method to break up > the subpath and test top down? Consider 'directory/subrepo', where > 'directory' is excluded.
(+CC Martin) Yeah the doc says that, but not all callers seem to obey the restriction. So I take it visitdir() won't return Falsy value if there is a possible match, even though it might return non-False for Falsy case if any parents return False. > It's probably beyond the scope of what you were fixing, but should all > subrepo recursion be guarded like this? > > > sub = ctx.sub(subpath) > > try: > > submatch = matchmod.subdirmatcher(subpath, matcher) Maybe we'll need ctx.walksub(matcher) which yields (subrepo, submatcher) pairs? _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel