1818import sys
1919from typing import List
2020
21+ from . import console
2122from .__version__ import __version__
23+ from .config import config
2224from .exceptions import CommitlintException
2325from .git_helpers import get_commit_message_of_hash , get_commit_messages_of_hash_range
2426from .linter import lint_commit_message
@@ -48,10 +50,10 @@ def get_args() -> argparse.Namespace:
4850 # for commit message check
4951 group = parser .add_mutually_exclusive_group (required = True )
5052 group .add_argument (
51- "commit_message" , nargs = "?" , type = str , help = "The commit message to be checked. "
53+ "commit_message" , nargs = "?" , type = str , help = "The commit message to be checked"
5254 )
5355 group .add_argument (
54- "--file" , type = str , help = "Path to a file containing the commit message. "
56+ "--file" , type = str , help = "Path to a file containing the commit message"
5557 )
5658 group .add_argument ("--hash" , type = str , help = "Commit hash" )
5759 group .add_argument ("--from-hash" , type = str , help = "From commit hash" )
@@ -64,14 +66,26 @@ def get_args() -> argparse.Namespace:
6466 action = "store_true" ,
6567 help = "Skip the detailed error message check" ,
6668 )
69+ 70+ output_group = parser .add_mutually_exclusive_group (required = False )
6771 # --quiet option is optional
68- parser .add_argument (
72+ output_group .add_argument (
6973 "-q" ,
7074 "--quiet" ,
7175 action = "store_true" ,
7276 help = "Ignore stdout and stderr" ,
7377 default = False ,
7478 )
79+ 80+ # --verbose option is optional
81+ output_group .add_argument (
82+ "-v" ,
83+ "--verbose" ,
84+ action = "store_true" ,
85+ help = "Verbose output" ,
86+ default = False ,
87+ )
88+ 7589 # parsing args
7690 args = parser .parse_args ()
7791
@@ -95,15 +109,15 @@ def _show_errors(
95109 error_count = len (errors )
96110 commit_message = remove_comments (commit_message )
97111
98- sys . stderr . write (f"⧗ Input:\n { commit_message } \n \n " )
112+ console . error (f"⧗ Input:\n { commit_message } \n " )
99113
100114 if skip_detail :
101- sys . stderr . write ( f" { VALIDATION_FAILED } \n " )
115+ console . error ( VALIDATION_FAILED )
102116 return
103117
104- sys . stderr . write (f"✖ Found { error_count } error(s).\n " )
118+ console . error (f"✖ Found { error_count } error(s)." )
105119 for error in errors :
106- sys . stderr . write (f"- { error } \n " )
120+ console . error (f"- { error } " )
107121
108122
109123def _get_commit_message_from_file (filepath : str ) -> str :
@@ -121,50 +135,42 @@ def _get_commit_message_from_file(filepath: str) -> str:
121135 IOError: If there is an issue reading the file.
122136 """
123137 abs_filepath = os .path .abspath (filepath )
138+ console .verbose (f"reading commit message from file { abs_filepath } " )
124139 with open (abs_filepath , encoding = "utf-8" ) as commit_message_file :
125140 commit_message = commit_message_file .read ().strip ()
126141 return commit_message
127142
128143
129- def _handle_commit_message (
130- commit_message : str , skip_detail : bool , quiet : bool = False
131- ) -> None :
144+ def _handle_commit_message (commit_message : str , skip_detail : bool ) -> None :
132145 """
133146 Handles a single commit message, checks its validity, and prints the result.
134147
135148 Args:
136149 commit_message (str): The commit message to be handled.
137150 skip_detail (bool): Whether to skip the detailed error linting.
138- quiet (bool): Whether to ignore stout and stderr
139151
140152 Raises:
141153 SystemExit: If the commit message is invalid.
142154 """
143155 success , errors = lint_commit_message (commit_message , skip_detail = skip_detail )
144156
145- if success and quiet :
146- return
147- 148157 if success :
149- sys . stdout . write ( f" { VALIDATION_SUCCESSFUL } \n " )
158+ console . success ( VALIDATION_SUCCESSFUL )
150159 return
151160
152- if not quiet :
153- _show_errors (commit_message , errors , skip_detail = skip_detail )
154- 161+ _show_errors (commit_message , errors , skip_detail = skip_detail )
155162 sys .exit (1 )
156163
157164
158165def _handle_multiple_commit_messages (
159- commit_messages : List [str ], skip_detail : bool , quiet : bool = False
166+ commit_messages : List [str ], skip_detail : bool
160167) -> None :
161168 """
162169 Handles multiple commit messages, checks their validity, and prints the result.
163170
164171 Args:
165172 commit_messages (List[str]): List of commit messages to be handled.
166173 skip_detail (bool): Whether to skip the detailed error linting.
167- quiet (bool): Whether to show the error and messages in console
168174 Raises:
169175 SystemExit: If any of the commit messages is invalid.
170176 """
@@ -173,18 +179,17 @@ def _handle_multiple_commit_messages(
173179 for commit_message in commit_messages :
174180 success , errors = lint_commit_message (commit_message , skip_detail = skip_detail )
175181 if success :
182+ console .verbose ("lint success" )
176183 continue
177184
178185 has_error = True
179- if not quiet :
180- _show_errors (commit_message , errors , skip_detail = skip_detail )
181- sys .stderr .write ("\n " )
186+ _show_errors (commit_message , errors , skip_detail = skip_detail )
187+ console .error ("" )
182188
183189 if has_error :
184190 sys .exit (1 )
185191
186- if not quiet :
187- sys .stdout .write (f"{ VALIDATION_SUCCESSFUL } \n " )
192+ console .success (VALIDATION_SUCCESSFUL )
188193
189194
190195def main () -> None :
@@ -193,31 +198,34 @@ def main() -> None:
193198 """
194199 args = get_args ()
195200
201+ # setting config based on args
202+ config .quiet = args .quiet
203+ config .verbose = args .verbose
204+ 205+ console .verbose ("starting commitlint" )
196206 try :
197207 if args .file :
208+ console .verbose ("checking commit from file" )
198209 commit_message = _get_commit_message_from_file (args .file )
199- _handle_commit_message (
200- commit_message , skip_detail = args .skip_detail , quiet = args .quiet
201- )
210+ _handle_commit_message (commit_message , skip_detail = args .skip_detail )
202211 elif args .hash :
212+ console .verbose ("checking commit from hash" )
203213 commit_message = get_commit_message_of_hash (args .hash )
204- _handle_commit_message (
205- commit_message , skip_detail = args .skip_detail , quiet = args .quiet
206- )
214+ _handle_commit_message (commit_message , skip_detail = args .skip_detail )
207215 elif args .from_hash :
216+ console .verbose ("checking commit from hash range" )
208217 commit_messages = get_commit_messages_of_hash_range (
209218 args .from_hash , args .to_hash
210219 )
211220 _handle_multiple_commit_messages (
212- commit_messages , skip_detail = args .skip_detail , quiet = args . quiet
221+ commit_messages , skip_detail = args .skip_detail
213222 )
214223 else :
224+ console .verbose ("checking commit message" )
215225 commit_message = args .commit_message .strip ()
216- _handle_commit_message (
217- commit_message , skip_detail = args .skip_detail , quiet = args .quiet
218- )
226+ _handle_commit_message (commit_message , skip_detail = args .skip_detail )
219227 except CommitlintException as ex :
220- sys . stderr . write (f"{ ex } \n " )
228+ console . error (f"{ ex } " )
221229 sys .exit (1 )
222230
223231
0 commit comments