# HG changeset patch # User Durham Goode # Date 1431818178 25200 # Node ID 714f612f2afc4b43876f36ca7fa5e3871e4f4bb2 # Parent 5a55ad6e8e241c78156389b864a7199ead080e71 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 -r 5a55ad6e8e24 -r 714f612f2afc mercurial/match.py --- a/mercurial/match.py Sat May 16 16:12:00 2015 -0700 +++ b/mercurial/match.py Sat May 16 16:16:18 2015 -0700 @@ -479,14 +479,21 @@ 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,