filter-repo: allow globs to match file or directory names

I added special code to filter-repo so that --path expressions could
match filenames or some leading directory name.  --path-regex, since it
does not implicitly add anchorings, can also match a leading path, and
can thus be used to match against directories.  --path-glob could not be
used to match a leading directory of a path, since fnmatch.fnmatch()
requires the full string to match.  But users like being able to specify
directory names, such as '*/bin', so let's take any glob expression and
treat it as two: '<glob>' and '<glob>/*' and try to match against either
one; this will allow it to match against file or directory names like
the other two types of path matching.

Signed-off-by: Elijah Newren <newren@gmail.com>
replace-text-limited-to-certain-files
Elijah Newren 4 years ago
parent 25b226b1de
commit 771404d656

@ -1650,6 +1650,10 @@ class FilteringOptions(object):
values = re.compile(values)
items = getattr(namespace, self.dest, []) or []
items.append((mod_type, match_type, values))
if (match_type, mod_type) == ('glob', 'filter'):
if not values.endswith(b'*'):
extension = b'*' if values.endswith(b'/') else b'/*'
items.append((mod_type, match_type, values+extension))
setattr(namespace, self.dest, items)
class HelperFilter(argparse.Action):
@ -2151,6 +2155,9 @@ EXAMPLES
new_path_changes.append(['rename', match_type, (match, repl)])
else:
new_path_changes.append(['filter', match_type, match])
if match_type == 'glob' and not match.endswith(b'*'):
extension = b'*' if match.endswith(b'/') else b'/*'
new_path_changes.append(['filter', match_type, match+extension])
return new_path_changes
@staticmethod

Loading…
Cancel
Save