Mercurial > hg-stable
changeset 13218:1f4721de2ca9
match: support reading pattern lists from files
author | Steve Borho <steve@borho.org> |
---|---|
date | Thu, 23 Dec 2010 15:12:24 -0600 |
parents | 637d07d8e377 |
children | d18a748d9c33 |
files | mercurial/help/patterns.txt mercurial/match.py |
diffstat | 2 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/help/patterns.txt Thu Dec 30 23:36:50 2010 -0600 +++ b/mercurial/help/patterns.txt Thu Dec 23 15:12:24 2010 -0600 @@ -20,6 +20,11 @@ To use a Perl/Python regular expression, start a name with ``re:``. Regexp pattern matching is anchored at the root of the repository. +To read name patterns from a file, use ``listfile:`` or ``listfile0:``. +The latter expects null delimited patterns while the former expects line +feeds. Each string read from the file is itself treated as a file +pattern. + Plain examples:: path:foo/bar a name bar in a directory named foo in the root @@ -39,3 +44,8 @@ Regexp examples:: re:.*\.c$ any name ending in ".c", anywhere in the repository + +File examples:: + + listfile:list.txt read list from list.txt with one file pattern per line + listfile0:list.txt read list from list.txt with null byte delimiters
--- a/mercurial/match.py Thu Dec 30 23:36:50 2010 -0600 +++ b/mercurial/match.py Thu Dec 23 15:12:24 2010 -0600 @@ -161,7 +161,8 @@ actual pattern.""" if ':' in pat: kind, val = pat.split(':', 1) - if kind in ('re', 'glob', 'path', 'relglob', 'relpath', 'relre'): + if kind in ('re', 'glob', 'path', 'relglob', 'relpath', 'relre', + 'listfile', 'listfile0'): return kind, val return default, pat @@ -270,6 +271,15 @@ name = util.canonpath(root, cwd, name, auditor) elif kind in ('relglob', 'path'): name = util.normpath(name) + elif kind in ('listfile', 'listfile0'): + delimiter = kind == 'listfile0' and '\0' or '\n' + try: + files = open(name, 'r').read().split(delimiter) + files = [f for f in files if f] + except EnvironmentError: + raise util.Abort(_("unable to read file list (%s)") % name) + pats += _normalize(files, default, root, cwd, auditor) + continue pats.append((kind, name)) return pats