From 7d56d7b582f6bee54711bc7d92bac7c12c46139f Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Fri, 14 Oct 2022 07:42:07 +0000 Subject: [PATCH] fix #190 - Enable multiple patterns on one line --- src/bumpver/v2patterns.py | 16 +++++++++++++--- src/bumpver/v2version.py | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/bumpver/v2patterns.py b/src/bumpver/v2patterns.py index f3dd7fd..b11b77e 100644 --- a/src/bumpver/v2patterns.py +++ b/src/bumpver/v2patterns.py @@ -296,11 +296,21 @@ def _replace_pattern_parts(pattern: str) -> str: PostitionedPart = typ.Tuple[int, int, str] part_patterns_by_index: typ.Dict[SortKey, PostitionedPart] = {} + used_fields = set() for part_name, part_pattern in PART_PATTERNS.items(): - start_idx = pattern.find(part_name) - if start_idx >= 0: + end_idx = 0 + while True: + start_idx = pattern.find(part_name, end_idx) + if start_idx < 0: + break + field = PATTERN_PART_FIELDS[part_name] - named_part_pattern = f"(?P<{field}>{part_pattern})" + if field in used_fields: + named_part_pattern = f"(?P<{field}_{len(used_fields)}>{part_pattern})" + else: + named_part_pattern = f"(?P<{field}>{part_pattern})" + used_fields.add(field) + end_idx = start_idx + len(part_name) sort_key = (-end_idx, -len(part_name)) part_patterns_by_index[sort_key] = (start_idx, end_idx, named_part_pattern) diff --git a/src/bumpver/v2version.py b/src/bumpver/v2version.py index 56a8f39..a5c8480 100644 --- a/src/bumpver/v2version.py +++ b/src/bumpver/v2version.py @@ -215,7 +215,7 @@ def parse_field_values_to_vinfo(field_values: FieldValues) -> version.V2VersionI """ # pylint:disable=dangerous-default-value; We don't mutate args, mypy would fail if we did. for key in field_values: - assert key in VALID_FIELD_KEYS, key + assert any(key.startswith(fkey) for fkey in VALID_FIELD_KEYS), key cinfo = parse_field_values_to_cinfo(field_values)