Allow for more control in template variables

Sepearate commit message coming from git for handling in template.
This commit is contained in:
David Paz 2022-07-15 17:45:52 +02:00
parent f072bb622f
commit 912f1a5f41
No known key found for this signature in database
GPG key ID: 6600CC47B1C1B063
4 changed files with 53 additions and 6 deletions

View file

@ -47,7 +47,7 @@ def _get_default_template() -> str:
def get_rendered_template(
template_file: str,
variables: dict[str, str],
variables: dict[str, Sequence[str]],
) -> str:
with open(template_file) as f:
template = Template(f.read())
@ -63,6 +63,8 @@ def update_commit_file(
with open(commit_msg_file) as f:
data = f.readlines()
commented = list(filter(lambda line: line.startswith('#'), data))
original = list(filter(lambda line: not line.startswith('#'), data))
data_as_str = ''.join([item for item in data])
# if message already contain ticket number means
# it is under git commit --amend or rebase or alike
@ -73,6 +75,8 @@ def update_commit_file(
variables = {
'ticket': ticket,
'content': data_as_str,
'commented': commented,
'original_msg': original,
}
content = get_rendered_template(

View file

@ -1,3 +1,5 @@
{{ content }}
{{ original_msg | join('') | trim() }}
Relates: {{ ticket }}
Relates: #{{ ticket }}
{{ commented | join('') }}

View file

@ -1 +1 @@
[{{ ticket }}] {{ content }}
[{{ ticket }}] {{ content | join('') }}

View file

@ -52,13 +52,13 @@ TESTS = (
),
(
b'',
b'\n\nRelates: AA-01',
b'\n\nRelates: #AA-01\n\n',
'feature/AA-01',
get_template_path('prepare_commit_msg_append.j2'),
),
(
b'Initial message',
b'Initial message\n\nRelates: AA-02',
b'Initial message\n\nRelates: #AA-02\n\n',
'feature/AA-02',
get_template_path('prepare_commit_msg_append.j2'),
),
@ -110,3 +110,44 @@ def test_main(
],
) == 0
assert path.read_binary() == expected_val
TESTS_TEMPLATES = (
(
b'Initial Message\n\n# Git commented\n# output simulated',
b'[1.0.0] Initial Message\n\n# Git commented\n# output simulated',
'release/1.0.0', # but this should
get_template_path('prepare_commit_msg_prepend.j2'),
),
(
b'Initial Message\n# Git commented\n# output simulated',
b'Initial Message\n\nRelates: #1.0.0\n\n'
b'# Git commented\n# output simulated',
'release/1.0.0', # but this should
get_template_path('prepare_commit_msg_append.j2'),
),
)
@pytest.mark.parametrize(
('input_s', 'expected_val', 'branch_name', 'template'),
TESTS_TEMPLATES,
)
def test_main_separating_content(
input_s, expected_val, branch_name, template,
temp_git_dir,
):
with temp_git_dir.as_cwd():
path = temp_git_dir.join('file.txt')
path.write_binary(input_s)
assert path.read_binary() == input_s
cmd_output('git', 'checkout', '-b', branch_name)
assert main(
argv=[
'-t', template,
'-p', '(?<=release/).*',
str(path),
],
) == 0
assert path.read_binary() == expected_val