Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions bumpversion/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,57 @@
]


def _handle_tag_only(known_args):
explicit_config = getattr(known_args, "config_file", None)
config_file = _determine_config_file(explicit_config)
vcs_info = _determine_vcs_usability()
defaults = _determine_current_version(vcs_info)
config, _config_file_exists, _config_newlines, part_configs, _files = _load_configuration(
config_file, explicit_config, defaults,
)
version_config = _setup_versionconfig(known_args, part_configs)
current_version = version_config.parse(known_args.current_version)
context = dict(
itertools.chain(
time_context.items(),
prefixed_environ().items(),
vcs_info.items(),
special_char_context.items(),
)
)
context["current_version"] = version_config.serialize(current_version, context)
context["new_version"] = context["current_version"]

tag_name = defaults.get("tag_name", "v{new_version}").format(**context)
tag_message = defaults.get("tag_message", "Bump version: {current_version} → {new_version}").format(**context)
sign_tags = defaults.get("sign_tags", False)

vcs = None
for vc in VCS:
if vc.is_usable():
vcs = vc
break

if vcs is None:
logger.warning("No usable VCS found; cannot tag.")
return

logger.info("Tagging '%s' %s in %s", tag_name,
"with message '{}'".format(tag_message) if tag_message else "without message",
vcs.__name__)
vcs.tag(sign_tags, tag_name, tag_message)


def main(original_args=None):
# determine configuration based on command-line arguments
# and on-disk configuration files
args, known_args, root_parser, positionals = _parse_arguments_phase_1(original_args)
_setup_logging(known_args.list, known_args.verbose)

if known_args.tag_only:
_handle_tag_only(known_args)
return

vcs_info = _determine_vcs_usability()
defaults = _determine_current_version(vcs_info)
explicit_config = None
Expand Down Expand Up @@ -199,6 +245,13 @@ def _parse_arguments_phase_1(original_args):
help="Don't abort if working directory is dirty",
required=False,
)
root_parser.add_argument(
"--tag-only",
action="store_true",
default=False,
dest="tag_only",
help="Tag the current HEAD with current_version from config without bumping or committing.",
)
known_args, _ = root_parser.parse_known_args(args)
return args, known_args, root_parser, positionals

Expand Down