mirror of
https://github.com/TECHNOFAB11/bumpver.git
synced 2025-12-12 22:40:09 +01:00
72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
|
|
# This file is part of the pycalver project
|
||
|
|
# https://github.com/mbarkhau/pycalver
|
||
|
|
#
|
||
|
|
# (C) 2018 Manuel Barkhau (@mbarkhau)
|
||
|
|
# SPDX-License-Identifier: MIT
|
||
|
|
|
||
|
|
import logging
|
||
|
|
import datetime as dt
|
||
|
|
|
||
|
|
from . import lex_id
|
||
|
|
log = logging.getLogger("pycalver.version")
|
||
|
|
|
||
|
|
|
||
|
|
def current_calver() -> str:
|
||
|
|
return dt.datetime.utcnow().strftime("v%Y%m")
|
||
|
|
|
||
|
|
|
||
|
|
def bump(old_version: str, release: str=None) -> str:
|
||
|
|
# old_version is assumed to be a valid calver string,
|
||
|
|
# validated in pycalver.config.parse.
|
||
|
|
|
||
|
|
old_calver, rest = old_version.split(".")
|
||
|
|
old_build, old_release = rest.split("-")
|
||
|
|
|
||
|
|
new_calver = current_calver()
|
||
|
|
new_build = lex_id.next_id(old_build)
|
||
|
|
if release is None:
|
||
|
|
# preserve existing release
|
||
|
|
new_release = old_release
|
||
|
|
else:
|
||
|
|
new_release = release
|
||
|
|
|
||
|
|
new_version = new_calver + "." + new_build
|
||
|
|
if new_release:
|
||
|
|
new_version += "-" + new_release
|
||
|
|
return new_version
|
||
|
|
|
||
|
|
|
||
|
|
def incr_version(old_version: str, *, tag: str="__sentinel__") -> str:
|
||
|
|
maybe_match: MaybeMatch = VERSION_RE.search(old_version)
|
||
|
|
|
||
|
|
if maybe_match is None:
|
||
|
|
raise ValueError(f"Invalid version string: {old_version}")
|
||
|
|
|
||
|
|
prev_version_info: PyCalVerInfo = maybe_match.groupdict()
|
||
|
|
|
||
|
|
prev_calver: str = prev_version_info["calver"]
|
||
|
|
next_calver: str = current_calver()
|
||
|
|
|
||
|
|
prev_build: str = prev_version_info["build"]
|
||
|
|
if prev_calver > next_calver:
|
||
|
|
log.warning(
|
||
|
|
f"'incr_version' called with '{old_version}', " +
|
||
|
|
f"which is from the future, " +
|
||
|
|
f"maybe your system clock is out of sync."
|
||
|
|
)
|
||
|
|
next_calver = prev_calver # leave calver as is
|
||
|
|
|
||
|
|
next_build = lex_id.next_id(prev_build)
|
||
|
|
new_version = f"{next_calver}.{next_build}"
|
||
|
|
if tag != "__sentinel__":
|
||
|
|
if tag is None:
|
||
|
|
pass # tag explicitly ignored/removed
|
||
|
|
else:
|
||
|
|
new_version += "-" + tag
|
||
|
|
elif "tag" in prev_version_info:
|
||
|
|
# preserve previous tag
|
||
|
|
new_version += "-" + prev_version_info["tag"]
|
||
|
|
|
||
|
|
assert old_version < new_version, f"{old_version} {new_version}"
|
||
|
|
return new_version
|