import logging LOG = logging.getLogger("gitlint.deprecated") DEPRECATED_LOG_FORMAT = "%(levelname)s: %(message)s" class Deprecation: """Singleton class that handles deprecation warnings and behavior.""" # LintConfig class that is used to determine deprecation behavior config = None # Set of warning messages that have already been logged, to prevent duplicate warnings warning_msgs = set() @classmethod def get_regex_method(cls, rule, regex_option): """Returns the regex method to be used for a given rule based on general.regex-style-search option. Logs a warning if the deprecated re.match method is returned.""" # if general.regex-style-search is set, just return re.search if cls.config.regex_style_search: return regex_option.value.search warning_msg = ( f"{rule.id} - {rule.name}: gitlint will be switching from using Python regex 'match' (match beginning) to " "'search' (match anywhere) semantics. " f"Please review your {rule.name}.regex option accordingly. " "To remove this warning, set general.regex-style-search=True. " "More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search" ) # Only log warnings once if warning_msg not in cls.warning_msgs: log = logging.getLogger("gitlint.deprecated.regex_style_search") log.warning(warning_msg) cls.warning_msgs.add(warning_msg) return regex_option.value.match