mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
check-changes: Warn about bugfixes on future releases
Warn when bugfix changes files say that the bug is in a future release. Closes ticket 27761.
This commit is contained in:
parent
7e862c3ec0
commit
3eafa61f63
3 changed files with 53 additions and 2 deletions
|
@ -408,7 +408,7 @@ endif
|
||||||
check-changes:
|
check-changes:
|
||||||
if USEPYTHON
|
if USEPYTHON
|
||||||
@if test -d "$(top_srcdir)/changes"; then \
|
@if test -d "$(top_srcdir)/changes"; then \
|
||||||
$(PYTHON) $(top_srcdir)/scripts/maint/lintChanges.py $(top_srcdir)/changes; \
|
PACKAGE_VERSION=$(PACKAGE_VERSION) $(PYTHON) $(top_srcdir)/scripts/maint/lintChanges.py $(top_srcdir)/changes; \
|
||||||
fi
|
fi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
o Minor features (changelogs):
|
o Minor features (changelogs):
|
||||||
- Check that bugfix versions in changes files look like Tor versions
|
- Check that bugfix versions in changes files look like Tor versions
|
||||||
from the versions spec. Closes ticket 27761.
|
from the versions spec. Warn when bugfixes claim to be on a future
|
||||||
|
release. Closes ticket 27761.
|
||||||
|
|
|
@ -35,6 +35,36 @@ NEEDS_SUBCATEGORIES = set([
|
||||||
"Major features",
|
"Major features",
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def split_tor_version(version):
|
||||||
|
'''
|
||||||
|
Return the initial numeric components of the Tor version as a list of ints.
|
||||||
|
For versions earlier than 0.1.0, returns MAJOR, MINOR, and MICRO.
|
||||||
|
For versions 0.1.0 and later, returns MAJOR, MINOR, MICRO, and PATCHLEVEL if present.
|
||||||
|
|
||||||
|
If the version is malformed, returns None.
|
||||||
|
'''
|
||||||
|
version_match = re.search('([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?', version)
|
||||||
|
if version_match is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
version_groups = version_match.groups()
|
||||||
|
if version_groups is None:
|
||||||
|
return None
|
||||||
|
if len(version_groups) < 3:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if len(version_groups) != 5:
|
||||||
|
return None
|
||||||
|
version_components = version_groups[0:3]
|
||||||
|
version_components += version_groups[4:5]
|
||||||
|
|
||||||
|
try:
|
||||||
|
version_list = [int(v) for v in version_components if v is not None]
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return version_list
|
||||||
|
|
||||||
def lintfile(fname):
|
def lintfile(fname):
|
||||||
have_warned = []
|
have_warned = []
|
||||||
|
|
||||||
|
@ -93,6 +123,26 @@ def lintfile(fname):
|
||||||
warn("Versions must have at least 3 digits. ('0.1.2', '0.3.4.8', or '0.3.5.1-alpha'.)")
|
warn("Versions must have at least 3 digits. ('0.1.2', '0.3.4.8', or '0.3.5.1-alpha'.)")
|
||||||
elif bugfix_match.group(0) is None:
|
elif bugfix_match.group(0) is None:
|
||||||
warn("Versions must have at least 3 digits. ('0.1.2', '0.3.4.8', or '0.3.5.1-alpha'.)")
|
warn("Versions must have at least 3 digits. ('0.1.2', '0.3.4.8', or '0.3.5.1-alpha'.)")
|
||||||
|
else:
|
||||||
|
bugfix_match = re.search('bugfix on ([0-9a-z][-.0-9a-z]+[0-9a-z])', contents)
|
||||||
|
bugfix_group = bugfix_match.groups(0) if bugfix_match is not None else None
|
||||||
|
bugfix_version = bugfix_group[0] if bugfix_group is not None else None
|
||||||
|
package_version = os.environ.get('PACKAGE_VERSION', None)
|
||||||
|
if bugfix_version is None:
|
||||||
|
# This should be unreachable, unless the patterns are out of sync
|
||||||
|
warn("Malformed bugfix version.")
|
||||||
|
elif package_version is not None:
|
||||||
|
# If $PACKAGE_VERSION isn't set, skip this check
|
||||||
|
bugfix_split = split_tor_version(bugfix_version)
|
||||||
|
package_split = split_tor_version(package_version)
|
||||||
|
if bugfix_split is None:
|
||||||
|
# This should be unreachable, unless the patterns are out of sync
|
||||||
|
warn("Malformed bugfix version: '{}'.".format(bugfix_version))
|
||||||
|
elif package_split is None:
|
||||||
|
# This should be unreachable, unless the patterns are out of sync, or the package versioning scheme has changed
|
||||||
|
warn("Malformed $PACKAGE_VERSION: '{}'.".format(package_version))
|
||||||
|
elif bugfix_split > package_split:
|
||||||
|
warn("Bugfixes must be made on earlier versions (or this version). (Bugfix on version: '{}', current tor package version: '{}'.)".format(bugfix_version, package_version))
|
||||||
|
|
||||||
return have_warned != []
|
return have_warned != []
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue