fix #12: sorting of tags ignored version number semantics

This commit is contained in:
Manuel Barkhau 2020-10-05 17:54:33 +00:00
parent 2660ec03d3
commit 54a5892957
6 changed files with 105 additions and 173 deletions

View file

@ -12,11 +12,12 @@
- New gitlab #2: Added `grep` subcommand to find and debug patterns.
- New: Added better error messages to debug regular expressions.
- New gitlab #10: `--pin-date` to keep date parts unchanged, and only increment non-date parts.
- New gitlab #9: Make commit message configurable.
- New: Added `--release-num` to increment the `alphaN`/`betaN`/`a0`/`b0`/etc. release number
- New: Added `--date=<iso-date>` parameter to set explicit date (instead of current date).
- Fix gitlab #8: Push tags only pushed tags, not actual commit.
- Fix gitlab #9: Make commit message configurable.
- Fix gitlab #12: Error sorting non-lexical version tags (e.g. semver).
- Fix gitlab #11: Show regexp when `--verbose` is used.
- Fix gitlab #8: Push now also pushes HEAD (used to only push the tag).
- Fix: Disallow `--release=dev` which has different semantics than other release tags.
- Fix: Entries in `file_patterns` were ignored if there were multiple for the same file.
- Switch main repo from gitlab to github.

View file

@ -20,7 +20,7 @@ warn_redundant_casts = True
[tool:isort]
known_first_party = pycalver
known_third_party = click,pathlib2,lexid
known_third_party = click,pathlib2,lexid,pkg_resources
force_single_line = True
length_sort = True

View file

@ -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()

View file

@ -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)

View file

@ -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)

View file

@ -17,12 +17,9 @@ import pytest
import pathlib2 as pl
from click.testing import CliRunner
from pycalver import v1cli
from pycalver import v2cli
from pycalver import config
from pycalver import __main__ as main
from pycalver import v1patterns
from pycalver.__main__ import cli
from pycalver.__main__ import incr_dispatch
# pylint:disable=redefined-outer-name ; pytest fixtures
# pylint:disable=protected-access ; allowed for test code
@ -88,7 +85,7 @@ def runner(tmpdir):
def test_help(runner):
result = runner.invoke(cli, ['--help', "-vv"])
result = runner.invoke(main.cli, ['--help', "-vv"])
assert result.exit_code == 0
assert "PyCalVer" in result.output
assert "bump " in result.output
@ -98,7 +95,7 @@ def test_help(runner):
def test_version(runner):
result = runner.invoke(cli, ['--version', "-vv"])
result = runner.invoke(main.cli, ['--version', "-vv"])
assert result.exit_code == 0
assert " version v20" in result.output
match = v1patterns.PYCALVER_RE.search(result.output)
@ -109,19 +106,19 @@ def test_incr_default(runner):
old_version = "v201701.0004-alpha"
cmd = ['test', "-vv", "--pin-date", "--release", "beta", old_version]
result = runner.invoke(cli, cmd)
result = runner.invoke(main.cli, cmd)
assert result.exit_code == 0
assert "Version: v201701.0005-beta\n" in result.output
cmd = ['test', "-vv", "--pin-date", "--release", "beta", old_version, "vYYYY0M.BUILD[-RELEASE]"]
result = runner.invoke(cli, cmd)
result = runner.invoke(main.cli, cmd)
assert result.exit_code == 0
assert "Version: v201701.1005-beta\n" in result.output
def test_incr_pin_date(runner):
old_version = "v201701.0999-alpha"
result = runner.invoke(cli, ['test', "-vv", "--pin-date", old_version])
result = runner.invoke(main.cli, ['test', "-vv", "--pin-date", old_version])
assert result.exit_code == 0
assert "Version: v201701.11000-alpha\n" in result.output
@ -137,27 +134,27 @@ def test_incr_semver(runner):
old_version = "0.1.0"
new_version = "0.1.1"
result = runner.invoke(cli, ['test', "-vv", "--patch", old_version, semver_pattern])
result = runner.invoke(main.cli, ['test', "-vv", "--patch", old_version, semver_pattern])
assert result.exit_code == 0
assert f"Version: {new_version}\n" in result.output
old_version = "0.1.1"
new_version = "0.2.0"
result = runner.invoke(cli, ['test', "-vv", "--minor", old_version, semver_pattern])
result = runner.invoke(main.cli, ['test', "-vv", "--minor", old_version, semver_pattern])
assert result.exit_code == 0
assert f"Version: {new_version}\n" in result.output
old_version = "0.1.1"
new_version = "1.0.0"
result = runner.invoke(cli, ['test', "-vv", "--major", old_version, semver_pattern])
result = runner.invoke(main.cli, ['test', "-vv", "--major", old_version, semver_pattern])
assert result.exit_code == 0
assert f"Version: {new_version}\n" in result.output
def test_incr_semver_invalid(runner, caplog):
result = runner.invoke(cli, ['test', "-vv", "--patch", "0.1.1"])
result = runner.invoke(main.cli, ['test', "-vv", "--patch", "0.1.1"])
assert result.exit_code == 1
assert len(caplog.records) > 0
log_record = caplog.records[0]
@ -169,7 +166,7 @@ def test_incr_to_beta(runner):
old_version = "v201701.0999-alpha"
initial_version = config._initial_version()
result = runner.invoke(cli, ['test', old_version, "-vv", "--release", "beta"])
result = runner.invoke(main.cli, ['test', old_version, "-vv", "--release", "beta"])
assert result.exit_code == 0
new_version = initial_version.replace(".1001-alpha", ".11000-beta")
assert f"Version: {new_version}\n" in result.output
@ -179,7 +176,7 @@ def test_incr_to_final(runner):
old_version = "v201701.0999-alpha"
initial_version = config._initial_version()
result = runner.invoke(cli, ['test', old_version, "-vv", "--release", "final"])
result = runner.invoke(main.cli, ['test', old_version, "-vv", "--release", "final"])
assert result.exit_code == 0
new_version = initial_version.replace(".1001-alpha", ".11000")
assert f"Version: {new_version}\n" in result.output
@ -191,7 +188,7 @@ def test_incr_release_num(runner):
old_version = "0.1.0b0"
new_version = "0.1.0b1"
result = runner.invoke(cli, ['test', "-vv", "--release-num", old_version, semver])
result = runner.invoke(main.cli, ['test', "-vv", "--release-num", old_version, semver])
assert result.exit_code == 0
assert f"Version: {new_version}\n" in result.output
@ -199,7 +196,7 @@ def test_incr_release_num(runner):
def test_incr_invalid(runner):
old_version = "v201701.0999-alpha"
result = runner.invoke(cli, ['test', old_version, "-vv", "--release", "alfa"])
result = runner.invoke(main.cli, ['test', old_version, "-vv", "--release", "alfa"])
assert result.exit_code == 1
@ -239,7 +236,7 @@ def _update_config_val(filename, **kwargs):
def test_nocfg(runner, caplog):
_add_project_files("README.md")
result = runner.invoke(cli, ['show', "-vv"])
result = runner.invoke(main.cli, ['show', "-vv"])
assert result.exit_code == 1
expected_msg = "Could not parse configuration. Perhaps try 'pycalver init'."
assert any(expected_msg in r.message for r in caplog.records)
@ -248,12 +245,12 @@ def test_nocfg(runner, caplog):
def test_novcs_nocfg_init(runner, caplog):
_add_project_files("README.md")
# dry mode test
result = runner.invoke(cli, ['init', "-vv", "--dry"])
result = runner.invoke(main.cli, ['init', "-vv", "--dry"])
assert result.exit_code == 0
assert not os.path.exists("pycalver.toml")
# non dry mode
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
assert os.path.exists("pycalver.toml")
@ -264,12 +261,12 @@ def test_novcs_nocfg_init(runner, caplog):
assert base_str in cfg_content
assert config.DEFAULT_TOML_README_MD_STR in cfg_content
result = runner.invoke(cli, ['show', "-vv"])
result = runner.invoke(main.cli, ['show', "-vv"])
assert result.exit_code == 0
assert f"Current Version: {config._initial_version()}\n" in result.output
assert f"PEP440 : {config._initial_version_pep440()}\n" in result.output
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 1
# check logging
@ -281,7 +278,7 @@ def test_novcs_nocfg_init(runner, caplog):
def test_novcs_setupcfg_init(runner):
_add_project_files("README.md", "setup.cfg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
with pl.Path("setup.cfg").open(mode="r", encoding="utf-8") as fobj:
@ -293,7 +290,7 @@ def test_novcs_setupcfg_init(runner):
assert base_str in cfg_content
assert config.DEFAULT_CONFIGPARSER_README_MD_STR in cfg_content
result = runner.invoke(cli, ['show', "-vv"])
result = runner.invoke(main.cli, ['show', "-vv"])
assert result.exit_code == 0
assert f"Current Version: {config._initial_version()}\n" in result.output
assert f"PEP440 : {config._initial_version_pep440()}\n" in result.output
@ -301,7 +298,7 @@ def test_novcs_setupcfg_init(runner):
def test_novcs_pyproject_init(runner):
_add_project_files("README.md", "pyproject.toml")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
with pl.Path("pyproject.toml").open(mode="r", encoding="utf-8") as fobj:
@ -311,7 +308,7 @@ def test_novcs_pyproject_init(runner):
assert base_str in cfg_content
assert config.DEFAULT_TOML_README_MD_STR in cfg_content
result = runner.invoke(cli, ['show'])
result = runner.invoke(main.cli, ['show'])
assert result.exit_code == 0
assert f"Current Version: {config._initial_version()}\n" in result.output
assert f"PEP440 : {config._initial_version_pep440()}\n" in result.output
@ -340,12 +337,12 @@ def test_git_init(runner, version_pattern):
_add_project_files("README.md")
_vcs_init("git")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
result = runner.invoke(cli, ['show'])
result = runner.invoke(main.cli, ['show'])
assert result.exit_code == 0
assert f"Current Version: {config._initial_version()}\n" in result.output
assert f"PEP440 : {config._initial_version_pep440()}\n" in result.output
@ -356,12 +353,12 @@ def test_hg_init(runner, version_pattern):
_add_project_files("README.md")
_vcs_init("hg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
result = runner.invoke(cli, ['show'])
result = runner.invoke(main.cli, ['show'])
assert result.exit_code == 0
assert f"Current Version: {config._initial_version()}\n" in result.output
assert f"PEP440 : {config._initial_version_pep440()}\n" in result.output
@ -374,7 +371,7 @@ def test_v1_git_tag_eval(runner, version_pattern):
# This will set a version that is older than the version tag
# we set in the vcs, which should take precedence.
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
@ -385,7 +382,7 @@ def test_v1_git_tag_eval(runner, version_pattern):
shell("git", "tag", "--annotate", tag_version, "--message", f"bump version to {tag_version}")
result = runner.invoke(cli, ['show', "-vv"])
result = runner.invoke(main.cli, ['show', "-vv"])
assert result.exit_code == 0
assert f"Current Version: {tag_version}\n" in result.output
assert f"PEP440 : {tag_version_pep440}\n" in result.output
@ -398,7 +395,7 @@ def test_hg_tag_eval(runner, version_pattern):
# This will set a version that is older than the version tag
# we set in the vcs, which should take precedence.
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
@ -409,7 +406,7 @@ def test_hg_tag_eval(runner, version_pattern):
shell("hg", "tag", tag_version, "--message", f"bump version to {tag_version}")
result = runner.invoke(cli, ['show', "-vv"])
result = runner.invoke(main.cli, ['show', "-vv"])
assert result.exit_code == 0
assert f"Current Version: {tag_version}\n" in result.output
assert f"PEP440 : {tag_version_pep440}\n" in result.output
@ -419,12 +416,12 @@ def test_hg_tag_eval(runner, version_pattern):
def test_novcs_bump(runner, version_pattern):
_add_project_files("README.md")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
result = runner.invoke(cli, ['bump', "-vv"])
result = runner.invoke(main.cli, ['bump', "-vv"])
assert result.exit_code == 0
calver = config._initial_version().split(".")[0]
@ -434,7 +431,7 @@ def test_novcs_bump(runner, version_pattern):
assert calver + ".1002-alpha !\n" in content
assert calver[1:] + ".1002a0 !]\n" in content
result = runner.invoke(cli, ['bump', "-vv", "--release", "beta"])
result = runner.invoke(main.cli, ['bump', "-vv", "--release", "beta"])
assert result.exit_code == 0
with pl.Path("README.md").open() as fobj:
@ -448,7 +445,7 @@ def test_git_bump(runner, version_pattern):
_add_project_files("README.md")
_vcs_init("git")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
@ -456,7 +453,7 @@ def test_git_bump(runner, version_pattern):
shell("git", "add", "pycalver.toml")
shell("git", "commit", "-m", "initial commit")
result = runner.invoke(cli, ['bump', "-vv"])
result = runner.invoke(main.cli, ['bump', "-vv"])
assert result.exit_code == 0
calver = config._initial_version()[:7]
@ -471,7 +468,7 @@ def test_hg_bump(runner, version_pattern):
_add_project_files("README.md")
_vcs_init("hg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("pycalver.toml", version_pattern=version_pattern)
@ -479,7 +476,7 @@ def test_hg_bump(runner, version_pattern):
shell("hg", "add", "pycalver.toml")
shell("hg", "commit", "-m", "initial commit")
result = runner.invoke(cli, ['bump', "-vv"])
result = runner.invoke(main.cli, ['bump', "-vv"])
assert result.exit_code == 0
calver = config._initial_version()[:7]
@ -493,7 +490,7 @@ def test_empty_git_bump(runner, caplog):
shell("git", "init")
with pl.Path("setup.cfg").open(mode="w") as fobj:
fobj.write("")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
with pl.Path("setup.cfg").open(mode="r") as fobj:
@ -504,7 +501,7 @@ def test_empty_git_bump(runner, caplog):
assert "\n[pycalver:file_patterns]\n" in default_cfg_data
assert "\nsetup.cfg =\n" in default_cfg_data
result = runner.invoke(cli, ['bump'])
result = runner.invoke(main.cli, ['bump'])
assert any(("working directory is not clean" in r.message) for r in caplog.records)
assert any(("setup.cfg" in r.message) for r in caplog.records)
@ -514,7 +511,7 @@ def test_empty_hg_bump(runner, caplog):
shell("hg", "init")
with pl.Path("setup.cfg").open(mode="w") as fobj:
fobj.write("")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
with pl.Path("setup.cfg").open(mode="r") as fobj:
@ -525,7 +522,7 @@ def test_empty_hg_bump(runner, caplog):
assert "\n[pycalver:file_patterns]\n" in default_cfg_text
assert "\nsetup.cfg =\n" in default_cfg_text
result = runner.invoke(cli, ['bump'])
result = runner.invoke(main.cli, ['bump'])
assert any(("working directory is not clean" in r.message) for r in caplog.records)
assert any(("setup.cfg" in r.message) for r in caplog.records)
@ -565,13 +562,13 @@ def test_v1_bump_semver_warning(runner, caplog, version_pattern):
_vcs_init("hg", files=["README.md", "setup.cfg"])
result = runner.invoke(cli, ['bump', "-vv", "-n", "--dry"])
result = runner.invoke(main.cli, ['bump', "-vv", "-n", "--dry"])
assert result.exit_code == 1
assert any("version did not change" in r.message for r in caplog.records)
assert any("--major/--minor/--patch required" in r.message for r in caplog.records)
result = runner.invoke(cli, ['bump', "-vv", "-n", "--dry", "--patch"])
result = runner.invoke(main.cli, ['bump', "-vv", "-n", "--dry", "--patch"])
assert result.exit_code == 0
@ -589,7 +586,7 @@ def test_v1_bump_semver_diff(runner, caplog, version_pattern):
cases = [("--major", "1.0.0"), ("--minor", "0.2.0"), ("--patch", "0.1.1")]
for flag, expected in cases:
result = runner.invoke(cli, ['bump', "-vv", "-n", "--dry", flag])
result = runner.invoke(main.cli, ['bump', "-vv", "-n", "--dry", flag])
assert result.exit_code == 0
assert len(caplog.records) == 0
@ -603,7 +600,7 @@ def test_v1_bump_semver_diff(runner, caplog, version_pattern):
@pytest.mark.parametrize("version_pattern", DEFAULT_VERSION_PATTERNS)
def test_get_diff(runner, version_pattern):
_add_project_files("README.md", "setup.cfg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
_update_config_val("setup.cfg", version_pattern=version_pattern)
@ -611,11 +608,7 @@ def test_get_diff(runner, version_pattern):
_, cfg = config.init()
new_version = "v202010.1003-beta"
if cfg.is_new_pattern:
diff_str = v2cli.get_diff(cfg, new_version)
else:
diff_str = v1cli.get_diff(cfg, new_version)
diff_str = main.get_diff(cfg, new_version)
diff_lines = set(diff_str.splitlines())
assert "- Hello World v201701.1002-alpha !" in diff_lines
@ -674,14 +667,14 @@ WEEKNUM_TEST_CASES = [
@pytest.mark.parametrize("date, pattern, expected", WEEKNUM_TEST_CASES)
def test_weeknum(date, pattern, expected, runner):
cmd = shlex.split(f"test -vv --date {date} 2020.40 {pattern}")
result = runner.invoke(cli, cmd)
result = runner.invoke(main.cli, cmd)
assert result.exit_code == 0
assert "New Version: " + expected in result.output
def test_hg_commit_message(runner, caplog):
_add_project_files("README.md", "setup.cfg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
commit_message = """
@ -693,7 +686,7 @@ def test_hg_commit_message(runner, caplog):
_vcs_init("hg", ["README.md", "setup.cfg"])
assert len(caplog.records) > 0
result = runner.invoke(cli, ['bump', "-vv", "--pin-date", "--release", "beta"])
result = runner.invoke(main.cli, ['bump', "-vv", "--pin-date", "--release", "beta"])
assert result.exit_code == 0
tags = shell("hg", "tags").decode("utf-8")
@ -708,7 +701,7 @@ def test_hg_commit_message(runner, caplog):
def test_git_commit_message(runner, caplog):
_add_project_files("README.md", "setup.cfg")
result = runner.invoke(cli, ['init', "-vv"])
result = runner.invoke(main.cli, ['init', "-vv"])
assert result.exit_code == 0
commit_message = """
@ -720,7 +713,7 @@ def test_git_commit_message(runner, caplog):
_vcs_init("git", ["README.md", "setup.cfg"])
assert len(caplog.records) > 0
result = runner.invoke(cli, ['bump', "-vv", "--pin-date", "--release", "beta"])
result = runner.invoke(main.cli, ['bump', "-vv", "--pin-date", "--release", "beta"])
assert result.exit_code == 0
tags = shell("git", "tag", "--list").decode("utf-8")
@ -739,13 +732,13 @@ def test_grep(runner):
search_re = r"^\s+2:\s+Hello World v201701\.1002-alpha !"
cmd1 = r'grep "vYYYY0M.BUILD[-RELEASE]" README.md'
result1 = runner.invoke(cli, shlex.split(cmd1))
result1 = runner.invoke(main.cli, shlex.split(cmd1))
assert result1.exit_code == 0
assert "README.md" in result1.output
assert re.search(search_re, result1.output, flags=re.MULTILINE)
cmd2 = r'grep --version-pattern "vYYYY0M.BUILD[-RELEASE]" "{version}" README.md'
result2 = runner.invoke(cli, shlex.split(cmd2))
result2 = runner.invoke(main.cli, shlex.split(cmd2))
assert result2.exit_code == 0
assert "README.md" in result2.output
assert re.search(search_re, result2.output, flags=re.MULTILINE)
@ -755,7 +748,7 @@ def test_grep(runner):
search_re = r"^\s+3:\s+\[aka\. 201701\.1002a0 \!\]"
cmd3 = r'grep "\[aka. YYYY0M.BLD[PYTAGNUM] \!\]" README.md'
result3 = runner.invoke(cli, shlex.split(cmd3))
result3 = runner.invoke(main.cli, shlex.split(cmd3))
assert result3.exit_code == 0
assert "README.md" in result3.output
assert re.search(search_re, result3.output, flags=re.MULTILINE)
@ -763,7 +756,7 @@ def test_grep(runner):
cmd4 = (
r'grep --version-pattern "vYYYY0M.BUILD[-RELEASE]" "\[aka. {pep440_version} \!\]" README.md'
)
result4 = runner.invoke(cli, shlex.split(cmd4))
result4 = runner.invoke(main.cli, shlex.split(cmd4))
assert result4.exit_code == 0
assert "README.md" in result4.output
assert re.search(search_re, result4.output, flags=re.MULTILINE)
@ -791,7 +784,7 @@ def test_multimatch_file_patterns(runner):
with pl.Path("setup.cfg").open(mode="w", encoding="utf-8") as fobj:
fobj.write(SETUP_CFG_MULTIMATCH_FILE_PATTERNS_FIXTURE)
result = runner.invoke(cli, ['bump', '--release', 'beta'])
result = runner.invoke(main.cli, ['bump', '--release', 'beta'])
assert result.exit_code == 0
with pl.Path("README.md").open(mode="r", encoding="utf-8") as fobj:
@ -831,7 +824,7 @@ ROLLOVER_TEST_CASES = [
@pytest.mark.parametrize("version_pattern, old_version, expected, kwargs", ROLLOVER_TEST_CASES)
def test_rollover(version_pattern, old_version, expected, kwargs):
new_version = incr_dispatch(old_version, raw_pattern=version_pattern, **kwargs)
new_version = main.incr_dispatch(old_version, raw_pattern=version_pattern, **kwargs)
if new_version is None:
assert expected is None
else: