Source code for cptree.exclude

# exclusion list functions

import shlex
from pathlib import Path

from .common import read_file_lines


[docs] def rsync_exclude_patterns(rsync_args): """parse rsync args and return list of exclude patterns as regex""" if not rsync_args: return [] globs = [] args = shlex.split(rsync_args) while "--exclude" in args: pos = args.index("--exclude") args.pop(pos) globs.append(args.pop(pos)) while "--exclude-from" in args: pos = args.index("--exclude-from") args.pop(pos) globs.extend(read_file_lines(Path(args.pop(pos)))) patterns = [glob_to_egrep(pattern) for pattern in globs] return patterns
[docs] def glob_to_egrep(glob_pattern): """ Convert a glob pattern to a regex pattern usable by egrep. Args: - glob_pattern (str): The glob pattern to convert. Returns: - str: A regex pattern equivalent to the input glob pattern. """ # Escape special regex characters in glob pattern, except for * and ? special_chars = "\\^$+{}[]|()." for char in special_chars: glob_pattern = glob_pattern.replace(char, "\\" + char) # Convert glob wildcards to regex equivalents glob_pattern = glob_pattern.replace("*", ".*") glob_pattern = glob_pattern.replace("?", ".") # Anchor the pattern to match the whole string regex_pattern = "^\\./" + glob_pattern + "$" return regex_pattern