Skip to content

Commit 4d0e65e

Browse files
committed
debug: simplify logging with debug mode
- Replace log-level parameter with debug flag in dev options - Add is_debug_mode method to logger for performance optimization - Skip verbose operations in non-debug mode - Remove unnecessary return type annotations Signed-off-by: ChaoLiu <[email protected]>
1 parent d21df10 commit 4d0e65e

File tree

6 files changed

+39
-25
lines changed

6 files changed

+39
-25
lines changed

splitpatch/__init__.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,24 @@
1111
handler.setFormatter(formatter)
1212
logger.addHandler(handler)
1313

14-
def setup_logging(log_level: str = 'INFO') -> None:
14+
def setup_logging(log_level: bool):
1515
"""Configure package-level logging settings
1616
1717
Args:
18-
log_level: Logging level, options: DEBUG, INFO, WARNING, ERROR, CRITICAL
18+
log_level: boolean value (True for DEBUG, False for INFO)
1919
"""
20-
numeric_level = getattr(logging, log_level.upper(), None)
21-
if not isinstance(numeric_level, int):
22-
raise ValueError(f"Invalid log level: {log_level}")
23-
20+
numeric_level = logging.DEBUG if log_level else logging.INFO
2421
logger.setLevel(numeric_level)
2522

23+
# Add is_debug_mode method to logger
24+
def is_debug_mode() -> bool:
25+
"""Check if current logging level is DEBUG
26+
27+
Returns:
28+
bool: True if logging level is DEBUG, False otherwise
29+
"""
30+
return logger.getEffectiveLevel() <= logging.DEBUG
31+
32+
logger.is_debug_mode = is_debug_mode
33+
2634
__all__ = ['logger', 'setup_logging']

splitpatch/cli.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,11 @@ def setup_args() -> argparse.Namespace:
4343

4444
# Other parameters
4545
main_group.add_argument('--dry-run', action='store_true', help='Only show operations to be performed, do not execute')
46-
main_group.add_argument('--log-level', type=str, default='INFO',
47-
choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
48-
help='Logging level (default: INFO)')
4946
main_group.add_argument('--version', action='version', version=f'%(prog)s {version("splitpatch")}')
5047

5148
# Developer arguments group (hidden from help)
5249
dev_group = parser.add_argument_group('developer options')
50+
dev_group.add_argument('--debug', action='store_true', help=argparse.SUPPRESS)
5351
dev_group.add_argument('--profile', action='store_true', help=argparse.SUPPRESS)
5452
dev_group.add_argument('--profile-output', type=str, default='splitpatch.prof',
5553
help=argparse.SUPPRESS)
@@ -60,7 +58,7 @@ def setup_args() -> argparse.Namespace:
6058
parser.error("--outdir is required in non-dry-run mode")
6159

6260
# Configure logging
63-
setup_logging(args.log_level)
61+
setup_logging(args.debug)
6462
logger.debug("Starting to process patch files")
6563

6664
# Print argument information
@@ -70,8 +68,9 @@ def setup_args() -> argparse.Namespace:
7068
logger.info(f" Output directory: {args.outdir}")
7169
logger.info(f" Merge level: {args.level}")
7270
logger.info(f" File count threshold: {args.threshold}")
73-
logger.info(f" Log level: {args.log_level}")
7471
logger.info(f" Dry run: {'yes' if args.dry_run else 'no'}")
72+
if args.debug:
73+
logger.info(f" Debug mode: enabled")
7574
if args.profile:
7675
logger.info(f" Performance profiling: enabled")
7776
logger.info(f" Profile output: {args.profile_output}")
@@ -146,7 +145,7 @@ def split_patch(patch: Patch, level: int, threshold: int) -> List[Patch]:
146145
return root.to_patches()
147146

148147
@profile_method
149-
def output_patches(patches: List[Patch], outdir: str, dry_run: bool) -> None:
148+
def output_patches(patches: List[Patch], outdir: str, dry_run: bool):
150149
"""Output processed patches to specified directory
151150
152151
Args:
@@ -174,7 +173,7 @@ def output_patches(patches: List[Patch], outdir: str, dry_run: bool) -> None:
174173
sys.exit(1)
175174

176175

177-
def main() -> None:
176+
def main():
178177
try:
179178
# Parse command line arguments
180179
args = setup_args()

splitpatch/merge.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def _find_module_boundaries(self) -> List[DirNode]:
8585
"""
8686
module_nodes = []
8787

88-
def traverse(node: DirNode) -> None:
88+
def traverse(node: DirNode):
8989
if self._is_module_boundary(node):
9090
module_nodes.append(node)
9191
for child in node.dir_nodes:
@@ -108,7 +108,7 @@ def _flatten_nodes(self, node: DirNode):
108108
logger.debug("Starting flatten operation")
109109
logger.debug(f"Processing flatten for node {node.path}")
110110

111-
def process_node(current: DirNode) -> None:
111+
def process_node(current: DirNode):
112112
"""Recursively process nodes"""
113113
# Process all children first (bottom-up)
114114
for child in current.dir_nodes[:]:
@@ -128,7 +128,7 @@ def _shorten_paths(self):
128128
"""
129129
logger.debug("Starting path shortening operation")
130130

131-
def process_node(node: DirNode) -> None:
131+
def process_node(node: DirNode):
132132
# Process all subdirectories first, bottom-up
133133
for child in node.dir_nodes[:]:
134134
process_node(child)
@@ -164,7 +164,7 @@ def _merge_by_level_and_size(self):
164164
"""
165165
logger.debug("Starting level and size based merge")
166166

167-
def process_node(node: DirNode) -> None:
167+
def process_node(node: DirNode):
168168
"""Recursively process nodes"""
169169
# Process all children first (bottom-up)
170170
for child in node.dir_nodes[:]:
@@ -191,7 +191,7 @@ def process_node(node: DirNode) -> None:
191191
logger.debug("Merge complete")
192192

193193
@profile_method
194-
def _merge_to_parent(self, node: DirNode, parent: DirNode) -> None:
194+
def _merge_to_parent(self, node: DirNode, parent: DirNode):
195195
"""
196196
Merge node into parent node
197197
@@ -229,7 +229,7 @@ def _merge_to_parent(self, node: DirNode, parent: DirNode) -> None:
229229
logger.debug(f"Completed merge of node {node.path} into parent {parent.path}")
230230

231231
@profile_method
232-
def _verify_tree_integrity(self, node: DirNode) -> None:
232+
def _verify_tree_integrity(self, node: DirNode):
233233
"""
234234
Verify tree integrity, ensure all node parent-child relationships are correct
235235
@@ -239,6 +239,9 @@ def _verify_tree_integrity(self, node: DirNode) -> None:
239239
Raises:
240240
ValueError: If tree integrity is violated
241241
"""
242+
if not logger.is_debug_mode():
243+
return
244+
242245
# Verify parent references of all subdirectories
243246
for child in node.dir_nodes:
244247
if child.parent != node:

splitpatch/patch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def try_parse(self) -> bool:
107107
return False
108108

109109
@profile_method
110-
def write_patch(self) -> None:
110+
def write_patch(self):
111111
"""Write patch to file"""
112112
# Get output directory path
113113
output_dir = os.path.dirname(self.path)

splitpatch/tree.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def _add_file(self, file_diff: FileDiff) -> FileDiff:
6868
return file_diff
6969

7070
@profile_method
71-
def add_file(self, file_diff: FileDiff) -> None:
71+
def add_file(self, file_diff: FileDiff):
7272
"""
7373
Add file to tree, automatically creating necessary directory structure.
7474
Note: This method can only be called on the root node.
@@ -169,7 +169,11 @@ def _tree_str(node: DirNode, level: int = 0, prefix: str = "", is_last: bool = T
169169

170170
return "\n".join(result)
171171

172-
return _tree_str(self)
172+
if logger.is_debug_mode():
173+
return _tree_str(self)
174+
175+
# Return simple path and file count information in non-debug mode
176+
return f"{self.path} ({len(self.file_changes)} files)"
173177

174178
@profile_method
175179
def to_patches(self) -> List[Patch]:
@@ -181,7 +185,7 @@ def to_patches(self) -> List[Patch]:
181185
"""
182186
patches = []
183187

184-
def _collect_patches(node: DirNode) -> None:
188+
def _collect_patches(node: DirNode):
185189
if node.file_changes: # Only process nodes with files
186190
patch = Patch(f"{node.path}")
187191
for file_diff in node.file_changes:

tests/test_cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ def tearDown(self):
4242
os.remove(self.sample_patch_file)
4343
os.rmdir(self.temp_dir)
4444

45-
@patch('sys.argv', ['splitpatch', 'test.patch', '--outdir', 'output', '--log-level', 'DEBUG'])
45+
@patch('sys.argv', ['splitpatch', 'test.patch', '--outdir', 'output', '--debug'])
4646
def test_setup_args(self):
4747
"""Test command line argument parsing"""
4848
args = setup_args()
4949
self.assertEqual(args.patch_files, ['test.patch'])
5050
self.assertEqual(args.outdir, 'output')
51-
self.assertEqual(args.log_level, 'DEBUG')
51+
self.assertTrue(args.debug)
5252
self.assertEqual(args.level, 1) # Default value
5353
self.assertEqual(args.threshold, 10) # Default value
5454
self.assertFalse(args.dry_run)

0 commit comments

Comments
 (0)