[PATCH 2 of 4] match: allow unioning arbitrary match functions
Martin von Zweigbergk
martinvonz at google.com
Thu May 21 13:24:25 CDT 2015
I'm pushing the first two patches to the clowncopter for now. Thanks.
On Wed, May 20, 2015 at 2:58 PM Durham Goode <durham at fb.com> wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1431818178 25200
> # Sat May 16 16:16:18 2015 -0700
> # Node ID 28ac58249dbc906622e368357daadd4814f9c71c
> # Parent aed26cd32a07f5e18065a521b4bc42afff2ccc5a
> match: allow unioning arbitrary match functions
>
> A future patch will be allowing nested matchers. To support that, let's
> refactor
> _buildmatch to build a list of matchers then return True if any match.
>
> We were already doing that for filesets + regex patterns, but this way
> will be
> more generic.
>
> diff --git a/mercurial/match.py b/mercurial/match.py
> --- a/mercurial/match.py
> +++ b/mercurial/match.py
> @@ -453,14 +453,21 @@ def _regex(kind, pat, globsuffix):
> def _buildmatch(ctx, kindpats, globsuffix, listsubrepos, root):
> '''Return regexp string and a matcher function for kindpats.
> globsuffix is appended to the regexp of globs.'''
> + matchfuncs = []
> +
> fset, kindpats = _expandsets(kindpats, ctx, listsubrepos)
> - if not kindpats:
> - return "", fset.__contains__
> + if fset:
> + matchfuncs.append(fset.__contains__)
>
> - regex, mf = _buildregexmatch(kindpats, globsuffix)
> - if fset:
> - return regex, lambda f: f in fset or mf(f)
> - return regex, mf
> + regex = ''
> + if kindpats:
> + regex, mf = _buildregexmatch(kindpats, globsuffix)
> + matchfuncs.append(mf)
> +
> + if len(matchfuncs) == 1:
> + return regex, matchfuncs[0]
> + else:
> + return regex, lambda f: any(mf(f) for mf in matchfuncs)
>
> def _buildregexmatch(kindpats, globsuffix):
> """Build a match function from a list of kinds and kindpats,
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20150521/2c4a381a/attachment.html>
More information about the Mercurial-devel
mailing list