[PATCH 2 of 2] cat: do not instantiate subrepo if no potential match in it

Matt Harbison mharbison72 at gmail.com
Sat Nov 25 23:53:45 EST 2017


On Sat, 25 Nov 2017 02:35:04 -0500, Yuya Nishihara <yuya at tcha.org> wrote:

> # HG changeset patch
> # User Yuya Nishihara <yuya at 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.

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)


More information about the Mercurial-devel mailing list