Mercurial > hg
comparison mercurial/match.py @ 25362:20ad936ac5d2
treemanifest: visit directory 'foo' when given e.g. '-X foo/ba?'
For globs like 'foo/ba?', match._roots() will return 'foo'. Since
visitdir(), excludes directories in the excluded roots, it would skip
the entire foo directory. This is incorrect, since 'foo/ba?' doesn't
mean that everything in foo/ should be exluded. Note that visitdir()
is called only from the treemanifest class, so this only affects tree
manifests. Fix by adding roots to the set of excluded roots only if
there are no excluded patterns.
Since 'glob' is the default pattern type for globs, we also need to
update some -X patterns in the tests to be of 'path' type to take
advantage of the visitdir tricks. For consistency, also update the -I
patterns.
It seems a little unfortunate that 'foo' in 'hg files -X foo' is
considered a pattern because of the implied 'glob' type, but improving
that is left for another day.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 27 May 2015 10:44:04 -0700 |
parents | caaf4045eca8 |
children | 419ac63fe29c |
comparison
equal
deleted
inserted
replaced
25361:1635579f9baf | 25362:20ad936ac5d2 |
---|---|
127 matchfns.append(im) | 127 matchfns.append(im) |
128 if exclude: | 128 if exclude: |
129 kindpats = self._normalize(exclude, 'glob', root, cwd, auditor) | 129 kindpats = self._normalize(exclude, 'glob', root, cwd, auditor) |
130 self.excludepat, em = _buildmatch(ctx, kindpats, '(?:/|$)', | 130 self.excludepat, em = _buildmatch(ctx, kindpats, '(?:/|$)', |
131 listsubrepos, root) | 131 listsubrepos, root) |
132 self._excluderoots.update(_roots(kindpats)) | 132 if not _anypats(kindpats): |
133 self._excluderoots.discard('.') | 133 self._excluderoots.update(_roots(kindpats)) |
134 self._excluderoots.discard('.') | |
134 matchfns.append(lambda f: not em(f)) | 135 matchfns.append(lambda f: not em(f)) |
135 if exact: | 136 if exact: |
136 if isinstance(patterns, list): | 137 if isinstance(patterns, list): |
137 self._files = patterns | 138 self._files = patterns |
138 else: | 139 else: |