mirror of
https://github.com/pre-commit/pre-commit-hooks.git
synced 2026-04-14 14:34:45 +00:00
Allow for more control in template variables
Sepearate commit message coming from git for handling in template.
This commit is contained in:
parent
f072bb622f
commit
912f1a5f41
4 changed files with 53 additions and 6 deletions
|
|
@ -47,7 +47,7 @@ def _get_default_template() -> str:
|
||||||
|
|
||||||
def get_rendered_template(
|
def get_rendered_template(
|
||||||
template_file: str,
|
template_file: str,
|
||||||
variables: dict[str, str],
|
variables: dict[str, Sequence[str]],
|
||||||
) -> str:
|
) -> str:
|
||||||
with open(template_file) as f:
|
with open(template_file) as f:
|
||||||
template = Template(f.read())
|
template = Template(f.read())
|
||||||
|
|
@ -63,6 +63,8 @@ def update_commit_file(
|
||||||
with open(commit_msg_file) as f:
|
with open(commit_msg_file) as f:
|
||||||
data = f.readlines()
|
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])
|
data_as_str = ''.join([item for item in data])
|
||||||
# if message already contain ticket number means
|
# if message already contain ticket number means
|
||||||
# it is under git commit --amend or rebase or alike
|
# it is under git commit --amend or rebase or alike
|
||||||
|
|
@ -73,6 +75,8 @@ def update_commit_file(
|
||||||
variables = {
|
variables = {
|
||||||
'ticket': ticket,
|
'ticket': ticket,
|
||||||
'content': data_as_str,
|
'content': data_as_str,
|
||||||
|
'commented': commented,
|
||||||
|
'original_msg': original,
|
||||||
}
|
}
|
||||||
|
|
||||||
content = get_rendered_template(
|
content = get_rendered_template(
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
{{ content }}
|
{{ original_msg | join('') | trim() }}
|
||||||
|
|
||||||
Relates: {{ ticket }}
|
Relates: #{{ ticket }}
|
||||||
|
|
||||||
|
{{ commented | join('') }}
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
[{{ ticket }}] {{ content }}
|
[{{ ticket }}] {{ content | join('') }}
|
||||||
|
|
|
||||||
|
|
@ -52,13 +52,13 @@ TESTS = (
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
b'',
|
b'',
|
||||||
b'\n\nRelates: AA-01',
|
b'\n\nRelates: #AA-01\n\n',
|
||||||
'feature/AA-01',
|
'feature/AA-01',
|
||||||
get_template_path('prepare_commit_msg_append.j2'),
|
get_template_path('prepare_commit_msg_append.j2'),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
b'Initial message',
|
b'Initial message',
|
||||||
b'Initial message\n\nRelates: AA-02',
|
b'Initial message\n\nRelates: #AA-02\n\n',
|
||||||
'feature/AA-02',
|
'feature/AA-02',
|
||||||
get_template_path('prepare_commit_msg_append.j2'),
|
get_template_path('prepare_commit_msg_append.j2'),
|
||||||
),
|
),
|
||||||
|
|
@ -110,3 +110,44 @@ def test_main(
|
||||||
],
|
],
|
||||||
) == 0
|
) == 0
|
||||||
assert path.read_binary() == expected_val
|
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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue