mirror of
https://github.com/TECHNOFAB11/bumpver.git
synced 2025-12-12 14:30:09 +01:00
fix: gh#172 use default date values
When parsing the current version, if it doesn't specify anyt date part, (such as is the case for e.g. SemVer), then use the current date to populate default parts. This enables updating YYYY patterns in copyright headers even for projects that don't use a CalVer pattern.
This commit is contained in:
parent
028d77751b
commit
53617b2624
4 changed files with 55 additions and 43 deletions
|
|
@ -281,7 +281,7 @@ def test(
|
||||||
raw_pattern = pattern # use internal naming convention
|
raw_pattern = pattern # use internal naming convention
|
||||||
|
|
||||||
_validate_flags(raw_pattern, major, minor, patch)
|
_validate_flags(raw_pattern, major, minor, patch)
|
||||||
_date = _validate_date(date, pin_date)
|
maybe_date = _validate_date(date, pin_date)
|
||||||
|
|
||||||
if set_version is None:
|
if set_version is None:
|
||||||
new_version = incr_dispatch(
|
new_version = incr_dispatch(
|
||||||
|
|
@ -293,7 +293,7 @@ def test(
|
||||||
tag=tag,
|
tag=tag,
|
||||||
tag_num=tag_num,
|
tag_num=tag_num,
|
||||||
pin_date=pin_date,
|
pin_date=pin_date,
|
||||||
date=_date,
|
maybe_date=maybe_date,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
new_version = set_version
|
new_version = set_version
|
||||||
|
|
@ -527,8 +527,8 @@ def incr_dispatch(
|
||||||
patch : bool = False,
|
patch : bool = False,
|
||||||
tag : str = None,
|
tag : str = None,
|
||||||
tag_num : bool = False,
|
tag_num : bool = False,
|
||||||
pin_date: bool = False,
|
pin_date : bool = False,
|
||||||
date : typ.Optional[dt.date] = None,
|
maybe_date: typ.Optional[dt.date] = None,
|
||||||
) -> typ.Optional[str]:
|
) -> typ.Optional[str]:
|
||||||
v1_parts = list(v1patterns.PART_PATTERNS) + list(v1patterns.FULL_PART_FORMATS)
|
v1_parts = list(v1patterns.PART_PATTERNS) + list(v1patterns.FULL_PART_FORMATS)
|
||||||
has_v1_part = any("{" + part + "}" in raw_pattern for part in v1_parts)
|
has_v1_part = any("{" + part + "}" in raw_pattern for part in v1_parts)
|
||||||
|
|
@ -552,7 +552,7 @@ def incr_dispatch(
|
||||||
tag=tag,
|
tag=tag,
|
||||||
tag_num=tag_num,
|
tag_num=tag_num,
|
||||||
pin_date=pin_date,
|
pin_date=pin_date,
|
||||||
date=date,
|
maybe_date=maybe_date,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return v2version.incr(
|
return v2version.incr(
|
||||||
|
|
@ -564,7 +564,7 @@ def incr_dispatch(
|
||||||
tag=tag,
|
tag=tag,
|
||||||
tag_num=tag_num,
|
tag_num=tag_num,
|
||||||
pin_date=pin_date,
|
pin_date=pin_date,
|
||||||
date=date,
|
maybe_date=maybe_date,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -762,7 +762,7 @@ def update(
|
||||||
verbose = max(_VERBOSE, verbose)
|
verbose = max(_VERBOSE, verbose)
|
||||||
_configure_logging(verbose)
|
_configure_logging(verbose)
|
||||||
_validate_release_tag(tag)
|
_validate_release_tag(tag)
|
||||||
_date = _validate_date(date, pin_date)
|
maybe_date = _validate_date(date, pin_date)
|
||||||
|
|
||||||
_, cfg = config.init(project_path=".")
|
_, cfg = config.init(project_path=".")
|
||||||
|
|
||||||
|
|
@ -789,7 +789,7 @@ def update(
|
||||||
tag=tag,
|
tag=tag,
|
||||||
tag_num=tag_num,
|
tag_num=tag_num,
|
||||||
pin_date=pin_date,
|
pin_date=pin_date,
|
||||||
date=_date,
|
maybe_date=maybe_date,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
new_version = set_version
|
new_version = set_version
|
||||||
|
|
|
||||||
|
|
@ -386,8 +386,8 @@ def incr(
|
||||||
patch : bool = False,
|
patch : bool = False,
|
||||||
tag : typ.Optional[str] = None,
|
tag : typ.Optional[str] = None,
|
||||||
tag_num : bool = False,
|
tag_num : bool = False,
|
||||||
pin_date: bool = False,
|
pin_date : bool = False,
|
||||||
date : typ.Optional[dt.date] = None,
|
maybe_date: typ.Optional[dt.date] = None,
|
||||||
) -> typ.Optional[str]:
|
) -> typ.Optional[str]:
|
||||||
"""Increment version string.
|
"""Increment version string.
|
||||||
|
|
||||||
|
|
@ -399,6 +399,8 @@ def incr(
|
||||||
logger.error(str(ex))
|
logger.error(str(ex))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
date = version.TODAY if maybe_date is None else maybe_date
|
||||||
|
|
||||||
cur_cinfo = _ver_to_cal_info(old_vinfo) if pin_date else cal_info(date)
|
cur_cinfo = _ver_to_cal_info(old_vinfo) if pin_date else cal_info(date)
|
||||||
|
|
||||||
if _is_cal_gt(old_vinfo, cur_cinfo):
|
if _is_cal_gt(old_vinfo, cur_cinfo):
|
||||||
|
|
|
||||||
|
|
@ -35,20 +35,6 @@ def _is_cal_gt(left: CalInfo, right: CalInfo) -> bool:
|
||||||
return lvals > rvals
|
return lvals > rvals
|
||||||
|
|
||||||
|
|
||||||
def _ver_to_cal_info(vinfo: version.V2VersionInfo) -> version.V2CalendarInfo:
|
|
||||||
return version.V2CalendarInfo(
|
|
||||||
vinfo.year_y,
|
|
||||||
vinfo.year_g,
|
|
||||||
vinfo.quarter,
|
|
||||||
vinfo.month,
|
|
||||||
vinfo.dom,
|
|
||||||
vinfo.doy,
|
|
||||||
vinfo.week_w,
|
|
||||||
vinfo.week_u,
|
|
||||||
vinfo.week_v,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def cal_info(date: dt.date = None) -> version.V2CalendarInfo:
|
def cal_info(date: dt.date = None) -> version.V2CalendarInfo:
|
||||||
"""Generate calendar components for current date.
|
"""Generate calendar components for current date.
|
||||||
|
|
||||||
|
|
@ -88,6 +74,21 @@ def cal_info(date: dt.date = None) -> version.V2CalendarInfo:
|
||||||
return version.V2CalendarInfo(**kwargs)
|
return version.V2CalendarInfo(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def _ver_to_cal_info(vinfo: version.V2VersionInfo) -> version.V2CalendarInfo:
|
||||||
|
defaults = cal_info(version.TODAY)
|
||||||
|
return version.V2CalendarInfo(
|
||||||
|
vinfo.year_y or defaults.year_y,
|
||||||
|
vinfo.year_g or defaults.year_g,
|
||||||
|
vinfo.quarter or defaults.quarter,
|
||||||
|
vinfo.month or defaults.month,
|
||||||
|
vinfo.dom or defaults.dom,
|
||||||
|
vinfo.doy or defaults.doy,
|
||||||
|
vinfo.week_w or defaults.week_w,
|
||||||
|
vinfo.week_u or defaults.week_u,
|
||||||
|
vinfo.week_v or defaults.week_v,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
VALID_FIELD_KEYS = set(version.V2VersionInfo._fields) | {'version'}
|
VALID_FIELD_KEYS = set(version.V2VersionInfo._fields) | {'version'}
|
||||||
|
|
||||||
MaybeInt = typ.Optional[int]
|
MaybeInt = typ.Optional[int]
|
||||||
|
|
@ -151,8 +152,14 @@ def parse_field_values_to_cinfo(field_values: FieldValues) -> version.V2Calendar
|
||||||
if year_y and month and dom:
|
if year_y and month and dom:
|
||||||
date = dt.date(year_y, month, dom)
|
date = dt.date(year_y, month, dom)
|
||||||
|
|
||||||
if date:
|
# Use of defaults is an all or nothing affair.
|
||||||
|
# We don't to mix anything from TODAY with stuff
|
||||||
|
# that was actually parsed from a string.
|
||||||
|
if not any((date, year_y, year_g, month, dom, doy, week_w, week_u, week_v)):
|
||||||
|
date = version.TODAY
|
||||||
|
|
||||||
# derive all fields from other previous values
|
# derive all fields from other previous values
|
||||||
|
if date:
|
||||||
year_y = int(date.strftime("%Y"), base=10)
|
year_y = int(date.strftime("%Y"), base=10)
|
||||||
year_g = int(date.strftime("%G"), base=10)
|
year_g = int(date.strftime("%G"), base=10)
|
||||||
month = int(date.strftime("%m"), base=10)
|
month = int(date.strftime("%m"), base=10)
|
||||||
|
|
@ -730,8 +737,8 @@ def incr(
|
||||||
patch : bool = False,
|
patch : bool = False,
|
||||||
tag : typ.Optional[str] = None,
|
tag : typ.Optional[str] = None,
|
||||||
tag_num : bool = False,
|
tag_num : bool = False,
|
||||||
pin_date: bool = False,
|
pin_date : bool = False,
|
||||||
date : typ.Optional[dt.date] = None,
|
maybe_date: typ.Optional[dt.date] = None,
|
||||||
) -> typ.Optional[str]:
|
) -> typ.Optional[str]:
|
||||||
"""Increment version string.
|
"""Increment version string.
|
||||||
|
|
||||||
|
|
@ -740,6 +747,8 @@ def incr(
|
||||||
if not is_valid_week_pattern(raw_pattern):
|
if not is_valid_week_pattern(raw_pattern):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
date = version.TODAY if maybe_date is None else maybe_date
|
||||||
|
|
||||||
try:
|
try:
|
||||||
old_vinfo = parse_version_info(old_version, raw_pattern)
|
old_vinfo = parse_version_info(old_version, raw_pattern)
|
||||||
except version.PatternError as ex:
|
except version.PatternError as ex:
|
||||||
|
|
@ -772,6 +781,7 @@ def incr(
|
||||||
)
|
)
|
||||||
|
|
||||||
new_version = format_version(cur_vinfo, raw_pattern)
|
new_version = format_version(cur_vinfo, raw_pattern)
|
||||||
|
|
||||||
if new_version == old_version:
|
if new_version == old_version:
|
||||||
logger.error("Invalid arguments or pattern, version did not change.")
|
logger.error("Invalid arguments or pattern, version did not change.")
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
|
|
@ -1200,7 +1200,7 @@ def test_multimatch_file_patterns(config_text, runner):
|
||||||
|
|
||||||
|
|
||||||
def _kwargs(year, month, minor=False):
|
def _kwargs(year, month, minor=False):
|
||||||
return {'date': dt.date(year, month, 1), 'minor': minor}
|
return {'maybe_date': dt.date(year, month, 1), 'minor': minor}
|
||||||
|
|
||||||
|
|
||||||
ROLLOVER_TEST_CASES = [
|
ROLLOVER_TEST_CASES = [
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue