mirror of
https://github.com/TECHNOFAB11/bumpver.git
synced 2025-12-12 14:30:09 +01:00
avoid duplicate pattern groups
Since patterns are always wrapped in a named group anyway, we don't need to do another unnamed group also. This makes the regular expressions more readable.
This commit is contained in:
parent
4c8c9b128a
commit
2f421daf16
2 changed files with 31 additions and 25 deletions
|
|
@ -64,27 +64,27 @@ PART_PATTERNS = {
|
||||||
'GG' : r"[1-9][0-9]?",
|
'GG' : r"[1-9][0-9]?",
|
||||||
'0G' : r"[0-9]{2}",
|
'0G' : r"[0-9]{2}",
|
||||||
'Q' : r"[1-4]",
|
'Q' : r"[1-4]",
|
||||||
'MM' : r"(?:1[0-2]|[1-9])",
|
'MM' : r"1[0-2]|[1-9]",
|
||||||
'0M' : r"(?:1[0-2]|0[1-9])",
|
'0M' : r"1[0-2]|0[1-9]",
|
||||||
'DD' : r"(?:3[0-1]|[1-2][0-9]|[1-9])",
|
'DD' : r"3[0-1]|[1-2][0-9]|[1-9]",
|
||||||
'0D' : r"(?:3[0-1]|[1-2][0-9]|0[1-9])",
|
'0D' : r"3[0-1]|[1-2][0-9]|0[1-9]",
|
||||||
'JJJ' : r"(?:36[0-6]|3[0-5][0-9]|[1-2][0-9][0-9]|[1-9][0-9]|[1-9])",
|
'JJJ' : r"36[0-6]|3[0-5][0-9]|[1-2][0-9][0-9]|[1-9][0-9]|[1-9]",
|
||||||
'00J' : r"(?:36[0-6]|3[0-5][0-9]|[1-2][0-9][0-9]|0[1-9][0-9]|00[1-9])",
|
'00J' : r"36[0-6]|3[0-5][0-9]|[1-2][0-9][0-9]|0[1-9][0-9]|00[1-9]",
|
||||||
# week numbering parts
|
# week numbering parts
|
||||||
'WW': r"(?:5[0-2]|[1-4][0-9]|[0-9])",
|
'WW': r"5[0-2]|[1-4][0-9]|[0-9]",
|
||||||
'0W': r"(?:5[0-2]|[0-4][0-9])",
|
'0W': r"5[0-2]|[0-4][0-9]",
|
||||||
'UU': r"(?:5[0-2]|[1-4][0-9]|[0-9])",
|
'UU': r"5[0-2]|[1-4][0-9]|[0-9]",
|
||||||
'0U': r"(?:5[0-2]|[0-4][0-9])",
|
'0U': r"5[0-2]|[0-4][0-9]",
|
||||||
'VV': r"(?:5[0-3]|[1-4][0-9]|[1-9])",
|
'VV': r"5[0-3]|[1-4][0-9]|[1-9]",
|
||||||
'0V': r"(?:5[0-3]|[1-4][0-9]|0[1-9])",
|
'0V': r"5[0-3]|[1-4][0-9]|0[1-9]",
|
||||||
# non calver parts
|
# non calver parts
|
||||||
'MAJOR' : r"[0-9]+",
|
'MAJOR' : r"[0-9]+",
|
||||||
'MINOR' : r"[0-9]+",
|
'MINOR' : r"[0-9]+",
|
||||||
'PATCH' : r"[0-9]+",
|
'PATCH' : r"[0-9]+",
|
||||||
'BUILD' : r"[0-9]+",
|
'BUILD' : r"[0-9]+",
|
||||||
'BLD' : r"[1-9][0-9]*",
|
'BLD' : r"[1-9][0-9]*",
|
||||||
'RELEASE': r"(?:preview|final|alpha|beta|post|pre|dev|rc|a|b|c|r)",
|
'RELEASE': r"preview|final|alpha|beta|post|rc",
|
||||||
'PYTAG' : r"(?:post|dev|rc|a|b)",
|
'PYTAG' : r"post|rc|a|b",
|
||||||
'NUM' : r"[0-9]+",
|
'NUM' : r"[0-9]+",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,21 +147,27 @@ V2_PART_PATTERN_CASES = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _compile_part_re(pattern_str):
|
||||||
|
grouped_pattern_str = r"(?:" + pattern_str + r")"
|
||||||
|
return re.compile(grouped_pattern_str)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("parts, testcase, expected", V2_PART_PATTERN_CASES)
|
@pytest.mark.parametrize("parts, testcase, expected", V2_PART_PATTERN_CASES)
|
||||||
def test_part_patterns(parts, testcase, expected):
|
def test_v2_part_patterns(parts, testcase, expected):
|
||||||
for part in parts:
|
for part in parts:
|
||||||
pattern_str = v2patterns.PART_PATTERNS[part]
|
part_re = _compile_part_re(v2patterns.PART_PATTERNS[part])
|
||||||
match = re.match("^" + pattern_str + "$", testcase)
|
match = part_re.match(testcase)
|
||||||
assert (match is None and expected is None) or (match.group(0) == expected)
|
assert (match is None and expected is None) or (match.group(0) == expected)
|
||||||
|
|
||||||
|
|
||||||
def _part_re_by_name(name):
|
@pytest.mark.parametrize("part_name", v2patterns.PART_PATTERNS.keys())
|
||||||
return re.compile(v1patterns.PART_PATTERNS[name])
|
def test_v1_part_compilation(part_name):
|
||||||
|
assert _compile_part_re(v2patterns.PART_PATTERNS[part_name])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("part_name", v1patterns.PART_PATTERNS.keys())
|
@pytest.mark.parametrize("part_name", v1patterns.PART_PATTERNS.keys())
|
||||||
def test_part_compilation(part_name):
|
def test_v2_part_compilation(part_name):
|
||||||
assert _part_re_by_name(part_name)
|
assert _compile_part_re(v1patterns.PART_PATTERNS[part_name])
|
||||||
|
|
||||||
|
|
||||||
PATTERN_PART_CASES = [
|
PATTERN_PART_CASES = [
|
||||||
|
|
@ -194,8 +200,8 @@ PATTERN_PART_CASES = [
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("part_name, line, expected", PATTERN_PART_CASES)
|
@pytest.mark.parametrize("part_name, line, expected", PATTERN_PART_CASES)
|
||||||
def test_re_pattern_parts(part_name, line, expected):
|
def test_v1_re_pattern_parts(part_name, line, expected):
|
||||||
part_re = _part_re_by_name(part_name)
|
part_re = _compile_part_re(v1patterns.PART_PATTERNS[part_name])
|
||||||
result = part_re.search(line)
|
result = part_re.search(line)
|
||||||
if result is None:
|
if result is None:
|
||||||
assert expected is None, (part_name, line)
|
assert expected is None, (part_name, line)
|
||||||
|
|
@ -213,7 +219,7 @@ PATTERN_V1_CASES = [
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("pattern_str, line, expected", PATTERN_V1_CASES)
|
@pytest.mark.parametrize("pattern_str, line, expected", PATTERN_V1_CASES)
|
||||||
def test_patterns_v1(pattern_str, line, expected):
|
def test_v1_patterns(pattern_str, line, expected):
|
||||||
pattern = v1patterns.compile_pattern(pattern_str)
|
pattern = v1patterns.compile_pattern(pattern_str)
|
||||||
result = pattern.regexp.search(line)
|
result = pattern.regexp.search(line)
|
||||||
if result is None:
|
if result is None:
|
||||||
|
|
@ -234,7 +240,7 @@ PATTERN_V2_CASES = [
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("pattern_str, line, expected", PATTERN_V2_CASES)
|
@pytest.mark.parametrize("pattern_str, line, expected", PATTERN_V2_CASES)
|
||||||
def test_patterns_v2(pattern_str, line, expected):
|
def test_v2_patterns(pattern_str, line, expected):
|
||||||
pattern = v2patterns.compile_pattern(pattern_str)
|
pattern = v2patterns.compile_pattern(pattern_str)
|
||||||
result = pattern.regexp.search(line)
|
result = pattern.regexp.search(line)
|
||||||
result_val = None if result is None else result.group(0)
|
result_val = None if result is None else result.group(0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue