mirror of
https://github.com/newren/git-filter-repo.git
synced 2024-07-06 02:12:17 +02:00
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>
This commit is contained in:
parent
25b226b1de
commit
771404d656
@ -1650,6 +1650,10 @@ class FilteringOptions(object):
|
|||||||
values = re.compile(values)
|
values = re.compile(values)
|
||||||
items = getattr(namespace, self.dest, []) or []
|
items = getattr(namespace, self.dest, []) or []
|
||||||
items.append((mod_type, match_type, values))
|
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)
|
setattr(namespace, self.dest, items)
|
||||||
|
|
||||||
class HelperFilter(argparse.Action):
|
class HelperFilter(argparse.Action):
|
||||||
@ -2151,6 +2155,9 @@ EXAMPLES
|
|||||||
new_path_changes.append(['rename', match_type, (match, repl)])
|
new_path_changes.append(['rename', match_type, (match, repl)])
|
||||||
else:
|
else:
|
||||||
new_path_changes.append(['filter', match_type, match])
|
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
|
return new_path_changes
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
Loading…
Reference in New Issue
Block a user