Mercurial > hg
annotate mercurial/match.py @ 12966:5f80f44d23c5 stable
win32: remove try-catch block of GetModuleFileNameEx (issue2480)
According to the API document, GetModuleFileName is the preferred way to
retrieve the filename of the current process. So we shouldn't try
GetModuleFileName'Ex' first.
Previously system_rcpath_win32() happened to return unicode paths due to
GetModuleFileNameEx (issue2480). This problem is fixed as GetModuleFileName
never return unicode.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 11 Nov 2010 01:12:51 +0900 |
parents | 83aaeba32b88 |
children | 1f4721de2ca9 |
rev | line source |
---|---|
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8682
diff
changeset
|
1 # match.py - filename matching |
8231
5d4d88a4f5e6
match: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
2 # |
5d4d88a4f5e6
match: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
3 # Copyright 2008, 2009 Matt Mackall <mpm@selenic.com> and others |
5d4d88a4f5e6
match: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
4 # |
5d4d88a4f5e6
match: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
8231
5d4d88a4f5e6
match: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
7 |
9036
32e678f9045f
split local and stdlib module imports (eases migration issues)
Alejandro Santos <alejolp@alejolp.com>
parents:
8761
diff
changeset
|
8 import re |
32e678f9045f
split local and stdlib module imports (eases migration issues)
Alejandro Santos <alejolp@alejolp.com>
parents:
8761
diff
changeset
|
9 import util |
12133
b046b90c4ae5
match: mark error messages for translation
Martin Geisler <mg@aragost.com>
parents:
10282
diff
changeset
|
10 from i18n import _ |
6576 | 11 |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
12 class match(object): |
8567
fea40a677d43
match: add some default args
Matt Mackall <mpm@selenic.com>
parents:
8566
diff
changeset
|
13 def __init__(self, root, cwd, patterns, include=[], exclude=[], |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
14 default='glob', exact=False, auditor=None): |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
15 """build an object to match a set of file patterns |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
16 |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
17 arguments: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
18 root - the canonical root of the tree you're matching against |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
19 cwd - the current working directory, if relevant |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
20 patterns - patterns to find |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
21 include - patterns to include |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
22 exclude - patterns to exclude |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
23 default - if a pattern in names has no explicit type, assume this one |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
24 exact - patterns are actually literals |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
25 |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
26 a pattern is one of: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
27 'glob:<glob>' - a glob relative to cwd |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
28 're:<regexp>' - a regular expression |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
29 'path:<path>' - a path relative to canonroot |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
30 'relglob:<glob>' - an unrooted glob (*.c matches C files in all dirs) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
31 'relpath:<path>' - a path relative to cwd |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
32 'relre:<regexp>' - a regexp that needn't match the start of a name |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
33 '<something>' - a pattern of the specified default type |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
34 """ |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
35 |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
36 self._root = root |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
37 self._cwd = cwd |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
38 self._files = [] |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
39 self._anypats = bool(include or exclude) |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
40 |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
41 if include: |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
42 im = _buildmatch(_normalize(include, 'glob', root, cwd, auditor), |
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
43 '(?:/|$)') |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
44 if exclude: |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
45 em = _buildmatch(_normalize(exclude, 'glob', root, cwd, auditor), |
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
46 '(?:/|$)') |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
47 if exact: |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
48 self._files = patterns |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
49 pm = self.exact |
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
50 elif patterns: |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
51 pats = _normalize(patterns, default, root, cwd, auditor) |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
52 self._files = _roots(pats) |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
53 self._anypats = self._anypats or _anypats(pats) |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
54 pm = _buildmatch(pats, '$') |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
55 |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
56 if patterns or exact: |
8581
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
57 if include: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
58 if exclude: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
59 m = lambda f: im(f) and not em(f) and pm(f) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
60 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
61 m = lambda f: im(f) and pm(f) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
62 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
63 if exclude: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
64 m = lambda f: not em(f) and pm(f) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
65 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
66 m = pm |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
67 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
68 if include: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
69 if exclude: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
70 m = lambda f: im(f) and not em(f) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
71 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
72 m = im |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
73 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
74 if exclude: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
75 m = lambda f: not em(f) |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
76 else: |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
77 m = lambda f: True |
101d305c1d0b
match: fold _matcher into match.__init__
Matt Mackall <mpm@selenic.com>
parents:
8580
diff
changeset
|
78 |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
79 self.matchfn = m |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
80 self._fmap = set(self._files) |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
81 |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
82 def __call__(self, fn): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
83 return self.matchfn(fn) |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
84 def __iter__(self): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
85 for f in self._files: |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
86 yield f |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
87 def bad(self, f, msg): |
8678
43598055bae8
match: document bad callback semantics
Matt Mackall <mpm@selenic.com>
parents:
8613
diff
changeset
|
88 '''callback for each explicit file that can't be |
43598055bae8
match: document bad callback semantics
Matt Mackall <mpm@selenic.com>
parents:
8613
diff
changeset
|
89 found/accessed, with an error message |
43598055bae8
match: document bad callback semantics
Matt Mackall <mpm@selenic.com>
parents:
8613
diff
changeset
|
90 ''' |
8680
b6511055d37b
match: ignore return of match.bad
Matt Mackall <mpm@selenic.com>
parents:
8678
diff
changeset
|
91 pass |
8587
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
92 def dir(self, f): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
93 pass |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
94 def missing(self, f): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
95 pass |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
96 def exact(self, f): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
97 return f in self._fmap |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
98 def rel(self, f): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
99 return util.pathto(self._root, self._cwd, f) |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
100 def files(self): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
101 return self._files |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
102 def anypats(self): |
8f15d54437b9
match: fold match into _match base class
Matt Mackall <mpm@selenic.com>
parents:
8586
diff
changeset
|
103 return self._anypats |
8568 | 104 |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
105 class exact(match): |
8585
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
106 def __init__(self, root, cwd, files): |
8586
347fe1ac4f21
match: add exact flag to match() to unify all match forms
Matt Mackall <mpm@selenic.com>
parents:
8585
diff
changeset
|
107 match.__init__(self, root, cwd, files, exact = True) |
8585
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
108 |
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
109 class always(match): |
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
110 def __init__(self, root, cwd): |
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
111 match.__init__(self, root, cwd, []) |
bbcd0da50e96
match: redefine always and never in terms of match and exact
Matt Mackall <mpm@selenic.com>
parents:
8584
diff
changeset
|
112 |
12165
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
113 class narrowmatcher(match): |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
114 """Adapt a matcher to work on a subdirectory only. |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
115 |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
116 The paths are remapped to remove/insert the path as needed: |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
117 |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
118 >>> m1 = match('root', '', ['a.txt', 'sub/b.txt']) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
119 >>> m2 = narrowmatcher('sub', m1) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
120 >>> bool(m2('a.txt')) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
121 False |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
122 >>> bool(m2('b.txt')) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
123 True |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
124 >>> bool(m2.matchfn('a.txt')) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
125 False |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
126 >>> bool(m2.matchfn('b.txt')) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
127 True |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
128 >>> m2.files() |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
129 ['b.txt'] |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
130 >>> m2.exact('b.txt') |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
131 True |
12267
69e43c0515f2
narrowmatcher: fix broken rel method
Martin Geisler <mg@lazybytes.net>
parents:
12165
diff
changeset
|
132 >>> m2.rel('b.txt') |
69e43c0515f2
narrowmatcher: fix broken rel method
Martin Geisler <mg@lazybytes.net>
parents:
12165
diff
changeset
|
133 'b.txt' |
12268
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
134 >>> def bad(f, msg): |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
135 ... print "%s: %s" % (f, msg) |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
136 >>> m1.bad = bad |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
137 >>> m2.bad('x.txt', 'No such file') |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
138 sub/x.txt: No such file |
12165
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
139 """ |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
140 |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
141 def __init__(self, path, matcher): |
12267
69e43c0515f2
narrowmatcher: fix broken rel method
Martin Geisler <mg@lazybytes.net>
parents:
12165
diff
changeset
|
142 self._root = matcher._root |
69e43c0515f2
narrowmatcher: fix broken rel method
Martin Geisler <mg@lazybytes.net>
parents:
12165
diff
changeset
|
143 self._cwd = matcher._cwd |
12165
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
144 self._path = path |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
145 self._matcher = matcher |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
146 |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
147 self._files = [f[len(path) + 1:] for f in matcher._files |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
148 if f.startswith(path + "/")] |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
149 self._anypats = matcher._anypats |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
150 self.matchfn = lambda fn: matcher.matchfn(self._path + "/" + fn) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
151 self._fmap = set(self._files) |
b7fbf24c8a93
match: add narrowmatcher class
Martin Geisler <mg@lazybytes.net>
parents:
12163
diff
changeset
|
152 |
12268
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
153 def bad(self, f, msg): |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
154 self._matcher.bad(self._path + "/" + f, msg) |
83aaeba32b88
narrowmatcher: propagate bad method
Martin Geisler <mg@lazybytes.net>
parents:
12267
diff
changeset
|
155 |
8568 | 156 def patkind(pat): |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
157 return _patsplit(pat, None)[0] |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
158 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
159 def _patsplit(pat, default): |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
160 """Split a string into an optional pattern kind prefix and the |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
161 actual pattern.""" |
8579 | 162 if ':' in pat: |
8613
4dea46d4e3f8
match: fix _patsplit breakage with drive letters
Matt Mackall <mpm@selenic.com>
parents:
8587
diff
changeset
|
163 kind, val = pat.split(':', 1) |
4dea46d4e3f8
match: fix _patsplit breakage with drive letters
Matt Mackall <mpm@selenic.com>
parents:
8587
diff
changeset
|
164 if kind in ('re', 'glob', 'path', 'relglob', 'relpath', 'relre'): |
4dea46d4e3f8
match: fix _patsplit breakage with drive letters
Matt Mackall <mpm@selenic.com>
parents:
8587
diff
changeset
|
165 return kind, val |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
166 return default, pat |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
167 |
8582
a4c199e12b5a
match: remove head and tail args from _globre
Matt Mackall <mpm@selenic.com>
parents:
8581
diff
changeset
|
168 def _globre(pat): |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
169 "convert a glob pattern into a regexp" |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
170 i, n = 0, len(pat) |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
171 res = '' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
172 group = 0 |
8583
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
173 escape = re.escape |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
174 def peek(): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
175 return i < n and pat[i] |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
176 while i < n: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
177 c = pat[i] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
178 i += 1 |
8583
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
179 if c not in '*?[{},\\': |
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
180 res += escape(c) |
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
181 elif c == '*': |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
182 if peek() == '*': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
183 i += 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
184 res += '.*' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
185 else: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
186 res += '[^/]*' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
187 elif c == '?': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
188 res += '.' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
189 elif c == '[': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
190 j = i |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
191 if j < n and pat[j] in '!]': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
192 j += 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
193 while j < n and pat[j] != ']': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
194 j += 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
195 if j >= n: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
196 res += '\\[' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
197 else: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
198 stuff = pat[i:j].replace('\\','\\\\') |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
199 i = j + 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
200 if stuff[0] == '!': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
201 stuff = '^' + stuff[1:] |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
202 elif stuff[0] == '^': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
203 stuff = '\\' + stuff |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
204 res = '%s[%s]' % (res, stuff) |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
205 elif c == '{': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
206 group += 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
207 res += '(?:' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
208 elif c == '}' and group: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
209 res += ')' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
210 group -= 1 |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
211 elif c == ',' and group: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
212 res += '|' |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
213 elif c == '\\': |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
214 p = peek() |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
215 if p: |
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
216 i += 1 |
8583
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
217 res += escape(p) |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
218 else: |
8583
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
219 res += escape(c) |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
220 else: |
8583
19d1b2aec562
match: optimize escaping in _globre
Matt Mackall <mpm@selenic.com>
parents:
8582
diff
changeset
|
221 res += escape(c) |
8582
a4c199e12b5a
match: remove head and tail args from _globre
Matt Mackall <mpm@selenic.com>
parents:
8581
diff
changeset
|
222 return res |
8570
7fe2012b3bd0
match: move util match functions over
Matt Mackall <mpm@selenic.com>
parents:
8568
diff
changeset
|
223 |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
224 def _regex(kind, name, tail): |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
225 '''convert a pattern into a regular expression''' |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
226 if not name: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
227 return '' |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
228 if kind == 're': |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
229 return name |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
230 elif kind == 'path': |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
231 return '^' + re.escape(name) + '(?:/|$)' |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
232 elif kind == 'relglob': |
8582
a4c199e12b5a
match: remove head and tail args from _globre
Matt Mackall <mpm@selenic.com>
parents:
8581
diff
changeset
|
233 return '(?:|.*/)' + _globre(name) + tail |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
234 elif kind == 'relpath': |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
235 return re.escape(name) + '(?:/|$)' |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
236 elif kind == 'relre': |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
237 if name.startswith('^'): |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
238 return name |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
239 return '.*' + name |
8582
a4c199e12b5a
match: remove head and tail args from _globre
Matt Mackall <mpm@selenic.com>
parents:
8581
diff
changeset
|
240 return _globre(name) + tail |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
241 |
8580
f648c096f6d0
match: rename _matchfn to _buildmatch
Matt Mackall <mpm@selenic.com>
parents:
8579
diff
changeset
|
242 def _buildmatch(pats, tail): |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
243 """build a matching function from a set of patterns""" |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
244 try: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
245 pat = '(?:%s)' % '|'.join([_regex(k, p, tail) for (k, p) in pats]) |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
246 if len(pat) > 20000: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
247 raise OverflowError() |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
248 return re.compile(pat).match |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
249 except OverflowError: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
250 # We're using a Python with a tiny regex engine and we |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
251 # made it explode, so we'll divide the pattern list in two |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
252 # until it works |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
253 l = len(pats) |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
254 if l < 2: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
255 raise |
8580
f648c096f6d0
match: rename _matchfn to _buildmatch
Matt Mackall <mpm@selenic.com>
parents:
8579
diff
changeset
|
256 a, b = _buildmatch(pats[:l//2], tail), _buildmatch(pats[l//2:], tail) |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
257 return lambda s: a(s) or b(s) |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
258 except re.error: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
259 for k, p in pats: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
260 try: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
261 re.compile('(?:%s)' % _regex(k, p, tail)) |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
262 except re.error: |
12133
b046b90c4ae5
match: mark error messages for translation
Martin Geisler <mg@aragost.com>
parents:
10282
diff
changeset
|
263 raise util.Abort(_("invalid pattern (%s): %s") % (k, p)) |
b046b90c4ae5
match: mark error messages for translation
Martin Geisler <mg@aragost.com>
parents:
10282
diff
changeset
|
264 raise util.Abort(_("invalid pattern")) |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
265 |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
266 def _normalize(names, default, root, cwd, auditor): |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
267 pats = [] |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
268 for kind, name in [_patsplit(p, default) for p in names]: |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
269 if kind in ('glob', 'relpath'): |
12163
505f64bb58af
match: accept auditor argument
Martin Geisler <mg@lazybytes.net>
parents:
12133
diff
changeset
|
270 name = util.canonpath(root, cwd, name, auditor) |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
271 elif kind in ('relglob', 'path'): |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
272 name = util.normpath(name) |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
273 |
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
274 pats.append((kind, name)) |
8576
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
275 return pats |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
276 |
8576
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
277 def _roots(patterns): |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
278 r = [] |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
279 for kind, name in patterns: |
8584
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
280 if kind == 'glob': # find the non-glob prefix |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
281 root = [] |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
282 for p in name.split('/'): |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
283 if '[' in p or '{' in p or '*' in p or '?' in p: |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
284 break |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
285 root.append(p) |
0f06e72abfdc
match: fold _globprefix into _roots
Matt Mackall <mpm@selenic.com>
parents:
8583
diff
changeset
|
286 r.append('/'.join(root) or '.') |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
287 elif kind in ('relpath', 'path'): |
8576
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
288 r.append(name or '.') |
8574
63a7ed2128d5
match: unnest functions in _matcher
Matt Mackall <mpm@selenic.com>
parents:
8573
diff
changeset
|
289 elif kind == 'relglob': |
8576
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
290 r.append('.') |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
291 return r |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
292 |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
293 def _anypats(patterns): |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
294 for kind, name in patterns: |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
295 if kind in ('glob', 're', 'relglob', 'relre'): |
ec4ed21db4b2
match: split up _normalizepats
Matt Mackall <mpm@selenic.com>
parents:
8575
diff
changeset
|
296 return True |