Skip to content

Commit 406f97a

Browse files
committed
Fixed some output in visualizing
1 parent 0bbd814 commit 406f97a

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

bumpversion/scm.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SCMInfo:
2525

2626
tool: Optional[Type["SourceCodeManager"]] = None
2727
commit_sha: Optional[str] = None
28-
distance_to_latest_tag: Optional[int] = None
28+
distance_to_latest_tag: int = 0
2929
current_version: Optional[str] = None
3030
branch_name: Optional[str] = None
3131
short_branch_name: Optional[str] = None

bumpversion/utils.py

+21-9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"""General utilities."""
2+
import datetime
23
import string
34
from collections import ChainMap
45
from dataclasses import asdict
56
from typing import TYPE_CHECKING, Any, List, Optional, Tuple
67

78
if TYPE_CHECKING: # pragma: no-coverage
89
from bumpversion.config import Config
10+
from bumpversion.scm import SCMInfo
911
from bumpversion.version_part import Version
1012

1113

@@ -51,19 +53,29 @@ def labels_for_format(serialize_format: str) -> List[str]:
5153
return [item[1] for item in string.Formatter().parse(serialize_format) if item[1]]
5254

5355

54-
def get_context(
55-
config: "Config", current_version: Optional["Version"] = None, new_version: Optional["Version"] = None
56-
) -> ChainMap:
57-
"""Return the context for rendering messages and tags."""
58-
import datetime
56+
def base_context(scm_info: Optional["SCMInfo"] = None) -> ChainMap:
57+
"""The default context for rendering messages and tags."""
58+
from bumpversion.scm import SCMInfo # Including this here to avoid circular imports
59+
60+
scm = asdict(scm_info) if scm_info else asdict(SCMInfo())
5961

60-
ctx = ChainMap(
61-
{"current_version": config.current_version},
62-
{"now": datetime.datetime.now(), "utcnow": datetime.datetime.utcnow()},
62+
return ChainMap(
63+
{
64+
"now": datetime.datetime.now(),
65+
"utcnow": datetime.datetime.now(datetime.timezone.utc),
66+
},
6367
prefixed_environ(),
64-
asdict(config.scm_info),
68+
scm,
6569
{c: c for c in ("#", ";")},
6670
)
71+
72+
73+
def get_context(
74+
config: "Config", current_version: Optional["Version"] = None, new_version: Optional["Version"] = None
75+
) -> ChainMap:
76+
"""Return the context for rendering messages and tags."""
77+
ctx = base_context(config.scm_info)
78+
ctx.new_child({"current_version": config.current_version})
6779
if current_version:
6880
ctx = ctx.new_child({f"current_{part}": current_version[part].value for part in current_version})
6981
if new_version:

bumpversion/visualize.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from bumpversion.config import Config
77
from bumpversion.exceptions import BumpVersionError
88
from bumpversion.ui import print_info
9-
from bumpversion.utils import get_context
9+
from bumpversion.utils import base_context, get_context
1010

1111
BOX_CHARS = {
1212
"ascii": ["+", "+", "+", "+", "+", "+", "+", "+", "-", "|", "+"],
@@ -92,10 +92,25 @@ def labeled_line(label: str, border: Border, fit_length: Optional[int] = None) -
9292
return f" {label} {border.line * (fit_length - len(label))}{border.line} "
9393

9494

95+
def filter_version_parts(config: Config) -> list[str]:
96+
"""
97+
Return the version parts that are in the configuration.
98+
99+
Args:
100+
config: The configuration to check against
101+
102+
Returns:
103+
The version parts that are in the configuration
104+
"""
105+
version_parts = [part for part in config.version_config.order if not part.startswith("$")]
106+
default_context = base_context(config.scm_info)
107+
return [part for part in version_parts if part not in default_context]
108+
109+
95110
def visualize(config: Config, version_str: str, box_style: str = "light") -> None:
96111
"""Output a visualization of the bump-my-version bump process."""
97112
version = config.version_config.parse(version_str)
98-
version_parts = config.version_config.order
113+
version_parts = filter_version_parts(config)
99114
num_parts = len(version_parts)
100115

101116
box_style = box_style if box_style in BOX_CHARS else "light"
@@ -111,8 +126,8 @@ def visualize(config: Config, version_str: str, box_style: str = "light") -> Non
111126
try:
112127
next_version = get_next_version(version, config, part, None)
113128
next_version_str = config.version_config.serialize(next_version, get_context(config))
114-
except (BumpVersionError, ValueError):
115-
next_version_str = "invalid"
129+
except (BumpVersionError, ValueError) as e:
130+
next_version_str = f"invalid: {e}"
116131

117132
has_next = i < num_parts - 1
118133
has_previous = i > 0

0 commit comments

Comments
 (0)