-
-
Notifications
You must be signed in to change notification settings - Fork 250
/
base.py
86 lines (69 loc) · 2.88 KB
/
base.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from abc import ABCMeta, abstractmethod
from typing import Callable, Dict, List, Optional, Tuple
from prompt_toolkit.styles import Style, merge_styles
from commitizen import git
from commitizen.config.base_config import BaseConfig
from commitizen.defaults import Questions
class BaseCommitizen(metaclass=ABCMeta):
bump_pattern: Optional[str] = None
bump_map: Optional[Dict[str, str]] = None
default_style_config: List[Tuple[str, str]] = [
("qmark", "fg:#ff9d00 bold"),
("question", "bold"),
("answer", "fg:#ff9d00 bold"),
("pointer", "fg:#ff9d00 bold"),
("highlighted", "fg:#ff9d00 bold"),
("selected", "fg:#cc5454"),
("separator", "fg:#cc5454"),
("instruction", ""),
("text", ""),
("disabled", "fg:#858585 italic"),
]
# The whole subject will be parsed as message by default
# This allows supporting changelog for any rule system.
# It can be modified per rule
commit_parser: Optional[str] = r"(?P<message>.*)"
changelog_pattern: Optional[str] = r".*"
change_type_map: Optional[Dict[str, str]] = None
change_type_order: Optional[List[str]] = None
# Executed per message parsed by the commitizen
changelog_message_builder_hook: Optional[
Callable[[Dict, git.GitCommit], Dict]
] = None
# Executed only at the end of the changelog generation
changelog_hook: Optional[Callable[[str, Optional[str]], str]] = None
def __init__(self, config: BaseConfig):
self.config = config
if not self.config.settings.get("style"):
self.config.settings.update({"style": BaseCommitizen.default_style_config})
@abstractmethod
def questions(self) -> Questions:
"""Questions regarding the commit message."""
@abstractmethod
def message(self, answers: dict) -> str:
"""Format your git message."""
@property
def style(self):
return merge_styles(
[
Style(BaseCommitizen.default_style_config),
Style(self.config.settings["style"]),
]
)
def example(self) -> Optional[str]:
"""Example of the commit message."""
raise NotImplementedError("Not Implemented yet")
def schema(self) -> Optional[str]:
"""Schema definition of the commit message."""
raise NotImplementedError("Not Implemented yet")
def schema_pattern(self) -> Optional[str]:
"""Regex matching the schema used for message validation."""
raise NotImplementedError("Not Implemented yet")
def info(self) -> Optional[str]:
"""Information about the standardized commit message."""
raise NotImplementedError("Not Implemented yet")
def process_commit(self, commit: str) -> str:
"""Process commit for changelog.
If not overwritten, it returns the first line of commit.
"""
return commit.split("\n")[0]