mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 00:04:42 +04:00
migrate-config rewrites deprecated stages
This commit is contained in:
parent
a7b671a758
commit
5679399d90
2 changed files with 63 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
import itertools
|
||||||
import textwrap
|
import textwrap
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
|
|
@ -49,6 +50,10 @@ def _preserve_style(n: ScalarNode, *, s: str) -> str:
|
||||||
return f'{n.style}{s}{n.style}'
|
return f'{n.style}{s}{n.style}'
|
||||||
|
|
||||||
|
|
||||||
|
def _fix_stage(n: ScalarNode) -> str:
|
||||||
|
return _preserve_style(n, s=f'pre-{n.value}')
|
||||||
|
|
||||||
|
|
||||||
def _migrate_composed(contents: str) -> str:
|
def _migrate_composed(contents: str) -> str:
|
||||||
tree = yaml_compose(contents)
|
tree = yaml_compose(contents)
|
||||||
rewrites: list[tuple[ScalarNode, Callable[[ScalarNode], str]]] = []
|
rewrites: list[tuple[ScalarNode, Callable[[ScalarNode], str]]] = []
|
||||||
|
|
@ -76,6 +81,22 @@ def _migrate_composed(contents: str) -> str:
|
||||||
if node.value == 'python_venv':
|
if node.value == 'python_venv':
|
||||||
rewrites.append((node, python_venv_replace))
|
rewrites.append((node, python_venv_replace))
|
||||||
|
|
||||||
|
# stages rewrites
|
||||||
|
default_stages_matcher = (MappingValue('default_stages'), SequenceItem())
|
||||||
|
default_stages_match = match(tree, default_stages_matcher)
|
||||||
|
hook_stages_matcher = (
|
||||||
|
MappingValue('repos'),
|
||||||
|
SequenceItem(),
|
||||||
|
MappingValue('hooks'),
|
||||||
|
SequenceItem(),
|
||||||
|
MappingValue('stages'),
|
||||||
|
SequenceItem(),
|
||||||
|
)
|
||||||
|
hook_stages_match = match(tree, hook_stages_matcher)
|
||||||
|
for node in itertools.chain(default_stages_match, hook_stages_match):
|
||||||
|
if node.value in {'commit', 'push', 'merge-commit'}:
|
||||||
|
rewrites.append((node, _fix_stage))
|
||||||
|
|
||||||
rewrites.sort(reverse=True, key=lambda nf: nf[0].start_mark.index)
|
rewrites.sort(reverse=True, key=lambda nf: nf[0].start_mark.index)
|
||||||
|
|
||||||
src_parts = []
|
src_parts = []
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,48 @@ repos:
|
||||||
assert cfg.read_text() == expected
|
assert cfg.read_text() == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_migrate_config_default_stages(tmp_path):
|
||||||
|
src = '''\
|
||||||
|
default_stages: [commit, push, merge-commit, commit-msg]
|
||||||
|
repos: []
|
||||||
|
'''
|
||||||
|
expected = '''\
|
||||||
|
default_stages: [pre-commit, pre-push, pre-merge-commit, commit-msg]
|
||||||
|
repos: []
|
||||||
|
'''
|
||||||
|
cfg = tmp_path.joinpath('cfg.yaml')
|
||||||
|
cfg.write_text(src)
|
||||||
|
assert migrate_config(str(cfg)) == 0
|
||||||
|
assert cfg.read_text() == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_migrate_config_hook_stages(tmp_path):
|
||||||
|
src = '''\
|
||||||
|
repos:
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: system
|
||||||
|
stages: ["commit", "push", "merge-commit", "commit-msg"]
|
||||||
|
'''
|
||||||
|
expected = '''\
|
||||||
|
repos:
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: system
|
||||||
|
stages: ["pre-commit", "pre-push", "pre-merge-commit", "commit-msg"]
|
||||||
|
'''
|
||||||
|
cfg = tmp_path.joinpath('cfg.yaml')
|
||||||
|
cfg.write_text(src)
|
||||||
|
assert migrate_config(str(cfg)) == 0
|
||||||
|
assert cfg.read_text() == expected
|
||||||
|
|
||||||
|
|
||||||
def test_migrate_config_invalid_yaml(tmpdir):
|
def test_migrate_config_invalid_yaml(tmpdir):
|
||||||
contents = '['
|
contents = '['
|
||||||
cfg = tmpdir.join(C.CONFIG_FILE)
|
cfg = tmpdir.join(C.CONFIG_FILE)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue