19
19
from typing import List
20
20
21
21
from .__version__ import __version__
22
- from .commitlint import check_commit_message , remove_comments
23
22
from .exceptions import CommitlintException
24
23
from .git_helpers import get_commit_message_of_hash , get_commit_messages_of_hash_range
25
- from .messages import VALIDATION_SUCCESSFUL
24
+ from .linter import lint_commit_message
25
+ from .linter .utils import remove_comments
26
+ from .messages import VALIDATION_FAILED , VALIDATION_SUCCESSFUL
26
27
27
28
28
29
def get_args () -> argparse .Namespace :
@@ -57,28 +58,45 @@ def get_args() -> argparse.Namespace:
57
58
# --to-hash is optional
58
59
parser .add_argument ("--to-hash" , type = str , help = "To commit hash" , default = "HEAD" )
59
60
61
+ # feature options
62
+ parser .add_argument (
63
+ "--skip-detail" ,
64
+ action = "store_true" ,
65
+ help = "Skip the detailed error message check" ,
66
+ )
67
+
60
68
# parsing args
61
69
args = parser .parse_args ()
62
70
63
71
return args
64
72
65
73
66
- def _show_errors (commit_message : str , errors : List [str ]) -> None :
74
+ def _show_errors (
75
+ commit_message : str ,
76
+ errors : List [str ],
77
+ skip_detail : bool = False ,
78
+ ) -> None :
67
79
"""
68
80
Display a formatted error message for a list of errors.
69
81
70
82
Args:
83
+ commit_message (str): The commit message to display.
71
84
errors (List[str]): A list of error messages to be displayed.
85
+ skip_detail (bool): Whether to skip the detailed error message.
86
+
72
87
"""
73
88
error_count = len (errors )
74
89
commit_message = remove_comments (commit_message )
75
90
76
- sys .stderr .write (
77
- f"⧗ Input:\n { commit_message } \n \n ✖ Found { error_count } error(s).\n \n "
78
- )
79
- for index , error in enumerate (errors ):
80
- end_char = "" if index == error_count - 1 else "\n "
81
- sys .stderr .write (f"- { error } \n { end_char } " )
91
+ sys .stderr .write (f"⧗ Input:\n { commit_message } \n \n " )
92
+
93
+ if skip_detail :
94
+ sys .stderr .write (f"{ VALIDATION_FAILED } \n " )
95
+ return
96
+
97
+ sys .stderr .write (f"✖ Found { error_count } error(s).\n " )
98
+ for error in errors :
99
+ sys .stderr .write (f"- { error } \n " )
82
100
83
101
84
102
def _get_commit_message_from_file (filepath : str ) -> str :
@@ -101,41 +119,45 @@ def _get_commit_message_from_file(filepath: str) -> str:
101
119
return commit_message
102
120
103
121
104
- def _handle_commit_message (commit_message : str ) -> None :
122
+ def _handle_commit_message (commit_message : str , skip_detail : bool ) -> None :
105
123
"""
106
124
Handles a single commit message, checks its validity, and prints the result.
107
125
108
126
Args:
109
127
commit_message (str): The commit message to be handled.
128
+ skip_detail (bool): Whether to skip the detailed error linting.
110
129
111
130
Raises:
112
131
SystemExit: If the commit message is invalid.
113
132
"""
114
- success , errors = check_commit_message (commit_message )
133
+ success , errors = lint_commit_message (commit_message , skip_detail = skip_detail )
115
134
116
135
if success :
117
136
sys .stdout .write (f"{ VALIDATION_SUCCESSFUL } \n " )
118
137
else :
119
- _show_errors (commit_message , errors )
138
+ _show_errors (commit_message , errors , skip_detail = skip_detail )
120
139
sys .exit (1 )
121
140
122
141
123
- def _handle_multiple_commit_messages (commit_messages : List [str ]) -> None :
142
+ def _handle_multiple_commit_messages (
143
+ commit_messages : List [str ], skip_detail : bool
144
+ ) -> None :
124
145
"""
125
146
Handles multiple commit messages, checks their validity, and prints the result.
126
147
127
148
Args:
128
149
commit_messages (List[str]): List of commit messages to be handled.
150
+ skip_detail (bool): Whether to skip the detailed error linting.
129
151
130
152
Raises:
131
153
SystemExit: If any of the commit messages is invalid.
132
154
"""
133
155
has_error = False
134
156
for commit_message in commit_messages :
135
- success , errors = check_commit_message (commit_message )
157
+ success , errors = lint_commit_message (commit_message , skip_detail = skip_detail )
136
158
if not success :
137
159
has_error = True
138
- _show_errors (commit_message , errors )
160
+ _show_errors (commit_message , errors , skip_detail = skip_detail )
139
161
sys .stderr .write ("\n " )
140
162
141
163
if has_error :
@@ -153,18 +175,20 @@ def main() -> None:
153
175
try :
154
176
if args .file :
155
177
commit_message = _get_commit_message_from_file (args .file )
156
- _handle_commit_message (commit_message )
178
+ _handle_commit_message (commit_message , skip_detail = args . skip_detail )
157
179
elif args .hash :
158
180
commit_message = get_commit_message_of_hash (args .hash )
159
- _handle_commit_message (commit_message )
181
+ _handle_commit_message (commit_message , skip_detail = args . skip_detail )
160
182
elif args .from_hash :
161
183
commit_messages = get_commit_messages_of_hash_range (
162
184
args .from_hash , args .to_hash
163
185
)
164
- _handle_multiple_commit_messages (commit_messages )
186
+ _handle_multiple_commit_messages (
187
+ commit_messages , skip_detail = args .skip_detail
188
+ )
165
189
else :
166
190
commit_message = args .commit_message .strip ()
167
- _handle_commit_message (commit_message )
191
+ _handle_commit_message (commit_message , skip_detail = args . skip_detail )
168
192
except CommitlintException as ex :
169
193
sys .stderr .write (f"{ ex } \n " )
170
194
sys .exit (1 )
0 commit comments