mirror of
https://github.com/TECHNOFAB11/bumpver.git
synced 2025-12-17 00:33:51 +01:00
fix #12: sorting of tags ignored version number semantics
This commit is contained in:
parent
2660ec03d3
commit
54a5892957
6 changed files with 105 additions and 173 deletions
|
|
@ -18,10 +18,9 @@ import subprocess as sp
|
|||
|
||||
import click
|
||||
import colorama
|
||||
import pkg_resources
|
||||
|
||||
from . import vcs
|
||||
from . import v1cli
|
||||
from . import v2cli
|
||||
from . import config
|
||||
from . import rewrite
|
||||
from . import version
|
||||
|
|
@ -339,6 +338,25 @@ def _colored_diff_lines(diff: str) -> typ.Iterable[str]:
|
|||
yield line
|
||||
|
||||
|
||||
def _v2_get_diff(cfg: config.Config, new_version: str) -> str:
|
||||
old_vinfo = v2version.parse_version_info(cfg.current_version, cfg.version_pattern)
|
||||
new_vinfo = v2version.parse_version_info(new_version, cfg.version_pattern)
|
||||
return v2rewrite.diff(old_vinfo, new_vinfo, cfg.file_patterns)
|
||||
|
||||
|
||||
def _v1_get_diff(cfg: config.Config, new_version: str) -> str:
|
||||
old_vinfo = v1version.parse_version_info(cfg.current_version, cfg.version_pattern)
|
||||
new_vinfo = v1version.parse_version_info(new_version, cfg.version_pattern)
|
||||
return v1rewrite.diff(old_vinfo, new_vinfo, cfg.file_patterns)
|
||||
|
||||
|
||||
def get_diff(cfg, new_version) -> str:
|
||||
if cfg.is_new_pattern:
|
||||
return _v2_get_diff(cfg, new_version)
|
||||
else:
|
||||
return _v1_get_diff(cfg, new_version)
|
||||
|
||||
|
||||
def _print_diff_str(diff: str) -> None:
|
||||
colored_diff = "\n".join(_colored_diff_lines(diff))
|
||||
if sys.stdout.isatty():
|
||||
|
|
@ -349,11 +367,7 @@ def _print_diff_str(diff: str) -> None:
|
|||
|
||||
def _print_diff(cfg: config.Config, new_version: str) -> None:
|
||||
try:
|
||||
if cfg.is_new_pattern:
|
||||
diff = v2cli.get_diff(cfg, new_version)
|
||||
else:
|
||||
diff = v1cli.get_diff(cfg, new_version)
|
||||
|
||||
diff = get_diff(cfg, new_version)
|
||||
_print_diff_str(diff)
|
||||
except rewrite.NoPatternMatch as ex:
|
||||
logger.error(str(ex))
|
||||
|
|
@ -489,9 +503,29 @@ def _update_cfg_from_vcs(cfg: config.Config, fetch: bool) -> config.Config:
|
|||
all_tags = vcs.get_tags(fetch=fetch)
|
||||
|
||||
if cfg.is_new_pattern:
|
||||
return v2cli.update_cfg_from_vcs(cfg, all_tags)
|
||||
version_tags = [tag for tag in all_tags if v2version.is_valid(tag, cfg.version_pattern)]
|
||||
else:
|
||||
return v1cli.update_cfg_from_vcs(cfg, all_tags)
|
||||
version_tags = [tag for tag in all_tags if v1version.is_valid(tag, cfg.version_pattern)]
|
||||
|
||||
if not version_tags:
|
||||
logger.debug("no vcs tags found")
|
||||
return cfg
|
||||
else:
|
||||
version_tags.sort(key=pkg_resources.parse_version, reverse=True)
|
||||
|
||||
_debug_tags = ", ".join(version_tags[:3])
|
||||
logger.debug(f"found tags: {_debug_tags} ... ({len(version_tags)} in total)")
|
||||
latest_version_tag = version_tags[0]
|
||||
latest_version_pep440 = version.to_pep440(latest_version_tag)
|
||||
if latest_version_tag <= cfg.current_version:
|
||||
return cfg
|
||||
else:
|
||||
logger.info(f"Working dir version : {cfg.current_version}")
|
||||
logger.info(f"Latest version from VCS tag: {latest_version_tag}")
|
||||
return cfg._replace(
|
||||
current_version=latest_version_tag,
|
||||
pep440_version=latest_version_pep440,
|
||||
)
|
||||
|
||||
|
||||
@cli.command()
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# This file is part of the pycalver project
|
||||
# https://github.com/mbarkhau/pycalver
|
||||
#
|
||||
# Copyright (c) 2018-2020 Manuel Barkhau (mbarkhau@gmail.com) - MIT License
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""
|
||||
CLI module for PyCalVer.
|
||||
|
||||
Provided subcommands: show, test, init, bump
|
||||
"""
|
||||
import typing as typ
|
||||
import logging
|
||||
|
||||
from . import config
|
||||
from . import version
|
||||
from . import v1rewrite
|
||||
from . import v1version
|
||||
|
||||
logger = logging.getLogger("pycalver.v1cli")
|
||||
|
||||
|
||||
def update_cfg_from_vcs(cfg: config.Config, all_tags: typ.List[str]) -> config.Config:
|
||||
version_tags = [tag for tag in all_tags if v1version.is_valid(tag, cfg.version_pattern)]
|
||||
if not version_tags:
|
||||
logger.debug("no vcs tags found")
|
||||
return cfg
|
||||
|
||||
version_tags.sort(reverse=True)
|
||||
_debug_tags = ", ".join(version_tags[:3])
|
||||
logger.debug(f"found tags: {_debug_tags} ... ({len(version_tags)} in total)")
|
||||
latest_version_tag = version_tags[0]
|
||||
latest_version_pep440 = version.to_pep440(latest_version_tag)
|
||||
if latest_version_tag <= cfg.current_version:
|
||||
return cfg
|
||||
|
||||
logger.info(f"Working dir version : {cfg.current_version}")
|
||||
logger.info(f"Latest version from VCS tag: {latest_version_tag}")
|
||||
return cfg._replace(
|
||||
current_version=latest_version_tag,
|
||||
pep440_version=latest_version_pep440,
|
||||
)
|
||||
|
||||
|
||||
def get_diff(cfg: config.Config, new_version: str) -> str:
|
||||
old_vinfo = v1version.parse_version_info(cfg.current_version, cfg.version_pattern)
|
||||
new_vinfo = v1version.parse_version_info(new_version , cfg.version_pattern)
|
||||
return v1rewrite.diff(old_vinfo, new_vinfo, cfg.file_patterns)
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# This file is part of the pycalver project
|
||||
# https://github.com/mbarkhau/pycalver
|
||||
#
|
||||
# Copyright (c) 2018-2020 Manuel Barkhau (mbarkhau@gmail.com) - MIT License
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""
|
||||
CLI module for PyCalVer.
|
||||
|
||||
Provided subcommands: show, test, init, bump
|
||||
"""
|
||||
import typing as typ
|
||||
import logging
|
||||
|
||||
from . import config
|
||||
from . import version
|
||||
from . import v2rewrite
|
||||
from . import v2version
|
||||
|
||||
logger = logging.getLogger("pycalver.v2cli")
|
||||
|
||||
|
||||
def update_cfg_from_vcs(cfg: config.Config, all_tags: typ.List[str]) -> config.Config:
|
||||
version_tags = [tag for tag in all_tags if v2version.is_valid(tag, cfg.version_pattern)]
|
||||
if not version_tags:
|
||||
logger.debug("no vcs tags found")
|
||||
return cfg
|
||||
|
||||
version_tags.sort(reverse=True)
|
||||
_debug_tags = ", ".join(version_tags[:3])
|
||||
logger.debug(f"found tags: {_debug_tags} ... ({len(version_tags)} in total)")
|
||||
latest_version_tag = version_tags[0]
|
||||
latest_version_pep440 = version.to_pep440(latest_version_tag)
|
||||
if latest_version_tag <= cfg.current_version:
|
||||
return cfg
|
||||
|
||||
logger.info(f"Working dir version : {cfg.current_version}")
|
||||
logger.info(f"Latest version from VCS tag: {latest_version_tag}")
|
||||
return cfg._replace(
|
||||
current_version=latest_version_tag,
|
||||
pep440_version=latest_version_pep440,
|
||||
)
|
||||
|
||||
|
||||
def get_diff(cfg: config.Config, new_version: str) -> str:
|
||||
old_vinfo = v2version.parse_version_info(cfg.current_version, cfg.version_pattern)
|
||||
new_vinfo = v2version.parse_version_info(new_version , cfg.version_pattern)
|
||||
return v2rewrite.diff(old_vinfo, new_vinfo, cfg.file_patterns)
|
||||
Loading…
Add table
Add a link
Reference in a new issue