[PATCH 2 of 4] match: allow unioning arbitrary match functions
Durham Goode
durham at fb.com
Wed May 20 16:57:34 CDT 2015
# 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,
More information about the Mercurial-devel
mailing list