Skip to content

Commit d1d19e3

Browse files
committed
Added indented logger to improve console output
1 parent 4e68214 commit d1d19e3

10 files changed

+148
-88
lines changed

bumpversion/bump.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""Version changing methods."""
2-
import logging
32
import shlex
43
from pathlib import Path
54
from typing import TYPE_CHECKING, ChainMap, List, Optional
@@ -12,9 +11,10 @@
1211
from bumpversion.config.files import update_config_file
1312
from bumpversion.config.files_legacy import update_ini_config_file
1413
from bumpversion.exceptions import ConfigurationError
14+
from bumpversion.ui import get_indented_logger
1515
from bumpversion.utils import get_context, key_val_string
1616

17-
logger = logging.getLogger("bumpversion")
17+
logger = get_indented_logger(__name__)
1818

1919

2020
def get_next_version(
@@ -36,14 +36,18 @@ def get_next_version(
3636
ConfigurationError: If it can't generate the next version.
3737
"""
3838
if new_version:
39+
logger.info("Attempting to set new version '%s'", new_version)
40+
logger.indent()
3941
next_version = config.version_config.parse(new_version)
4042
elif version_part:
4143
logger.info("Attempting to increment part '%s'", version_part)
44+
logger.indent()
4245
next_version = current_version.bump(version_part, config.version_config.order)
4346
else:
4447
raise ConfigurationError("Unable to get the next version.")
4548

4649
logger.info("Values are now: %s", key_val_string(next_version.values))
50+
logger.dedent()
4751
return next_version
4852

4953

@@ -66,8 +70,13 @@ def do_bump(
6670
"""
6771
from bumpversion.files import modify_files, resolve_file_config
6872

73+
logger.indent()
74+
6975
ctx = get_context(config)
76+
logger.info("Parsing current version '%s'", config.current_version)
77+
logger.indent()
7078
version = config.version_config.parse(config.current_version)
79+
logger.dedent()
7180
next_version = get_next_version(version, config, version_part, new_version)
7281
next_version_str = config.version_config.serialize(next_version, ctx)
7382
logger.info("New version will be '%s'", next_version_str)
@@ -76,6 +85,8 @@ def do_bump(
7685
logger.info("Version is already '%s'", next_version_str)
7786
return
7887

88+
logger.dedent()
89+
7990
if dry_run:
8091
logger.info("Dry run active, won't touch any files.")
8192

@@ -91,6 +102,7 @@ def do_bump(
91102
ctx = get_context(config, version, next_version)
92103
ctx["new_version"] = next_version_str
93104
commit_and_tag(config, config_file, configured_files, ctx, dry_run)
105+
logger.info("Done.")
94106

95107

96108
def commit_and_tag(

bumpversion/cli.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""bump-my-version Command line interface."""
2-
import logging
32
from typing import List, Optional
43

54
import rich_click as click
@@ -12,10 +11,10 @@
1211
from bumpversion.config.files import find_config_file
1312
from bumpversion.files import ConfiguredFile, modify_files
1413
from bumpversion.show import do_show, log_list
15-
from bumpversion.ui import print_warning, setup_logging
14+
from bumpversion.ui import get_indented_logger, print_warning, setup_logging
1615
from bumpversion.utils import get_context, get_overrides
1716

18-
logger = logging.getLogger(__name__)
17+
logger = get_indented_logger(__name__)
1918

2019

2120
@click.group(
@@ -307,6 +306,7 @@ def bump(
307306
config.add_files(files)
308307
config.included_paths = files
309308

309+
logger.dedent()
310310
do_bump(version_part, new_version, config, found_config_file, dry_run)
311311

312312

bumpversion/config/__init__.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
"""Configuration management."""
22
from __future__ import annotations
33

4-
import logging
54
from typing import TYPE_CHECKING, Union
65

76
from bumpversion.config.files import read_config_file
87
from bumpversion.config.models import Config
98
from bumpversion.exceptions import ConfigurationError
9+
from bumpversion.ui import get_indented_logger
1010

1111
if TYPE_CHECKING: # pragma: no-coverage
1212
from pathlib import Path
1313

14-
logger = logging.getLogger(__name__)
14+
logger = get_indented_logger(__name__)
1515

1616
DEFAULTS = {
1717
"current_version": None,
@@ -49,6 +49,9 @@ def get_configuration(config_file: Union[str, Path, None] = None, **overrides) -
4949
from bumpversion.config.utils import get_all_file_configs, get_all_part_configs
5050
from bumpversion.scm import SCMInfo, SourceCodeManager, get_scm_info # noqa: F401
5151

52+
logger.info("Reading configuration")
53+
logger.indent()
54+
5255
config_dict = DEFAULTS.copy()
5356
parsed_config = read_config_file(config_file) if config_file else {}
5457

@@ -75,6 +78,8 @@ def get_configuration(config_file: Union[str, Path, None] = None, **overrides) -
7578
# Update and verify the current_version
7679
config.current_version = check_current_version(config)
7780

81+
logger.dedent()
82+
7883
return config
7984

8085

bumpversion/config/files.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@
22

33
from __future__ import annotations
44

5-
import logging
65
from pathlib import Path
76
from typing import TYPE_CHECKING, Any, Dict, MutableMapping, Union
87

98
from bumpversion.config.files_legacy import read_ini_file
10-
from bumpversion.ui import print_warning
9+
from bumpversion.ui import get_indented_logger, print_warning
1110

1211
if TYPE_CHECKING: # pragma: no-coverage
1312
from bumpversion.config.models import Config
1413
from bumpversion.version_part import Version
1514

16-
logger = logging.getLogger(__name__)
15+
logger = get_indented_logger(__name__)
1716

1817
CONFIG_FILE_SEARCH_ORDER = (
1918
".bumpversion.cfg",
@@ -67,7 +66,7 @@ def read_config_file(config_file: Union[str, Path, None] = None) -> Dict[str, An
6766
logger.info("Configuration file not found: %s.", config_path)
6867
return {}
6968

70-
logger.info("Reading config file %s:", config_file)
69+
logger.info("Reading config file: %s", config_file)
7170

7271
if config_path.suffix == ".cfg":
7372
print_warning("The .cfg file format is deprecated. Please use .toml instead.")
@@ -120,9 +119,11 @@ def update_config_file(
120119
from bumpversion.files import DataFileUpdater
121120

122121
if not config_file:
123-
logger.info("No configuration file found to update.")
122+
logger.info("\n%sNo configuration file found to update.", logger.indent_str)
124123
return
125-
124+
else:
125+
logger.info("\n%sProcessing config file: %s", logger.indent_str, config_file)
126+
logger.indent()
126127
config_path = Path(config_file)
127128
if config_path.suffix != ".toml":
128129
logger.info("You must have a `.toml` suffix to update the config file: %s.", config_path)
@@ -142,3 +143,4 @@ def update_config_file(
142143

143144
updater = DataFileUpdater(datafile_config, config.version_config.part_configs)
144145
updater.update_file(current_version, new_version, context, dry_run)
146+
logger.dedent()

bumpversion/config/files_legacy.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
"""This module handles the legacy config file format."""
22
from __future__ import annotations
33

4-
import logging
54
import re
65
from difflib import context_diff
76
from pathlib import Path
87
from typing import Any, Dict, Union
98

10-
logger = logging.getLogger(__name__)
9+
from bumpversion.ui import get_indented_logger
10+
11+
logger = get_indented_logger(__name__)
1112

1213

1314
def read_ini_file(file_path: Path) -> Dict[str, Any]: # noqa: C901

bumpversion/indented_logger.py

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ def __init__(
3232
if reset:
3333
self.reset()
3434

35+
@property
36+
def current_indent(self) -> int:
37+
"""
38+
The current indent level.
39+
"""
40+
return CURRENT_INDENT.get()
41+
3542
def indent(self, amount: int = 1) -> None:
3643
"""
3744
Increase the indent level by `amount`.

bumpversion/scm.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"""Version control system management."""
22

3-
import logging
43
import os
54
import re
65
import subprocess
@@ -9,14 +8,15 @@
98
from tempfile import NamedTemporaryFile
109
from typing import TYPE_CHECKING, ClassVar, List, MutableMapping, Optional, Type, Union
1110

11+
from bumpversion.ui import get_indented_logger
1212
from bumpversion.utils import extract_regex_flags
1313

1414
if TYPE_CHECKING: # pragma: no-coverage
1515
from bumpversion.config import Config
1616

1717
from bumpversion.exceptions import DirtyWorkingDirectoryError, SignedTagsError
1818

19-
logger = logging.getLogger(__name__)
19+
logger = get_indented_logger(__name__)
2020

2121

2222
@dataclass
@@ -145,6 +145,7 @@ def commit_to_scm(
145145
"Preparing" if do_commit else "Would prepare",
146146
cls.__name__,
147147
)
148+
logger.indent()
148149
for path in files:
149150
logger.info(
150151
"%s changes in file '%s' to %s",
@@ -171,6 +172,7 @@ def commit_to_scm(
171172
new_version=context["new_version"],
172173
extra_args=extra_args,
173174
)
175+
logger.dedent()
174176

175177
@classmethod
176178
def tag_in_scm(cls, config: "Config", context: MutableMapping, dry_run: bool = False) -> None:

bumpversion/version_part.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""Module for managing Versions and their internal parts."""
2-
import logging
32
import re
43
import string
54
from copy import copy
@@ -10,9 +9,10 @@
109
from bumpversion.config.models import VersionPartConfig
1110
from bumpversion.exceptions import FormattingError, InvalidVersionPartError, MissingValueError
1211
from bumpversion.functions import NumericFunction, PartFunction, ValuesFunction
12+
from bumpversion.ui import get_indented_logger
1313
from bumpversion.utils import key_val_string, labels_for_format
1414

15-
logger = logging.getLogger(__name__)
15+
logger = get_indented_logger(__name__)
1616

1717

1818
class VersionPart:
@@ -183,6 +183,7 @@ def parse(self, version_string: Optional[str] = None) -> Optional[Version]:
183183
version_string,
184184
regexp_one_line,
185185
)
186+
logger.indent()
186187

187188
match = self.parse_regex.search(version_string)
188189

@@ -202,6 +203,7 @@ def parse(self, version_string: Optional[str] = None) -> Optional[Version]:
202203
v = Version(_parsed, version_string)
203204

204205
logger.info("Parsed the following values: %s", key_val_string(v.values))
206+
logger.dedent()
205207

206208
return v
207209

@@ -268,8 +270,8 @@ def _serialize(
268270
def _choose_serialize_format(self, version: Version, context: MutableMapping) -> str:
269271
chosen = None
270272

271-
logger.debug("Available serialization formats: '%s'", "', '".join(self.serialize_formats))
272-
273+
logger.debug("Evaluating serialization formats")
274+
logger.indent()
273275
for serialize_format in self.serialize_formats:
274276
try:
275277
self._serialize(version, serialize_format, context, raise_if_incomplete=True)
@@ -291,7 +293,7 @@ def _choose_serialize_format(self, version: Version, context: MutableMapping) ->
291293

292294
if not chosen:
293295
raise KeyError("Did not find suitable serialization format")
294-
296+
logger.dedent()
295297
logger.debug("Selected serialization format '%s'", chosen)
296298

297299
return chosen
@@ -307,6 +309,9 @@ def serialize(self, version: Version, context: MutableMapping) -> str:
307309
Returns:
308310
The serialized version as a string
309311
"""
312+
logger.debug("Serializing version '%s'", version)
313+
logger.indent()
310314
serialized = self._serialize(version, self._choose_serialize_format(version, context), context)
311315
logger.debug("Serialized to '%s'", serialized)
316+
logger.dedent()
312317
return serialized

0 commit comments

Comments
 (0)