send-updates.py: Introduce support to skip editorial changes

We generally do not want to announce those on the mailing lists,
so this switch allows us to avoid having to run without -y.
This commit is contained in:
Jonas Schäfer 2020-06-14 11:02:57 +02:00
parent 7eb2c2e095
commit 2ea54d4a3c
1 changed files with 56 additions and 5 deletions

View File

@ -133,6 +133,10 @@ def dummy_info(number):
}
def extract_version(info):
return info.get("last_revision", {}).get("version")
def diff_infos(old, new):
if old["status"] != new["status"]:
if new["status"] == Status.PROTO:
@ -151,8 +155,8 @@ def diff_infos(old, new):
old["last_call"] != new["last_call"]):
return Action.LAST_CALL
old_version = old.get("last_revision", {}).get("version")
new_version = new.get("last_revision", {}).get("version")
old_version = extract_version(old)
new_version = extract_version(new)
if old_version != new_version:
return Action.UPDATE
@ -160,6 +164,32 @@ def diff_infos(old, new):
return None
def decompose_version(s):
version_info = list(s.split("."))
if len(version_info) < 3:
version_info.extend(['0'] * (3 - len(version_info)))
return version_info
def filter_bump_level(old_version, new_version,
include_editorial, include_non_editorial):
if old_version is None:
# treat as non-editorial
is_editorial = False
else:
old_version_d = decompose_version(old_version)
new_version_d = decompose_version(new_version)
# if the version number only differs in patch level or below, the change
# is editorial
is_editorial = old_version_d[:2] == new_version_d[:2]
if is_editorial and not include_editorial:
return False
if not is_editorial and not include_non_editorial:
return False
return True
def wraptext(text):
return "\n".join(
itertools.chain(
@ -262,10 +292,10 @@ def main():
)
parser.add_argument(
"--no-proto",
dest="process_proto",
dest="include_protoxep",
default=True,
action="store_false",
help="Disable processing of ProtoXEPs.",
help="Do not announce ProtoXEPs",
)
parser.add_argument(
"-n", "--dry-run",
@ -274,6 +304,20 @@ def main():
default=False,
help="Instead of sending emails, print them to stdout (implies -y)",
)
parser.add_argument(
"--no-editorial",
action="store_false",
default=True,
dest="include_editorial",
help="Do not announce editorial changes."
)
parser.add_argument(
"--no-non-editorial",
action="store_false",
default=True,
dest="include_non_editorial",
help="Do not announce non-editorial changes."
)
parser.add_argument(
"old",
@ -334,6 +378,13 @@ def main():
new_info = new_accepted[common_xep]
action = diff_infos(old_info, new_info)
if action == Action.UPDATE and not filter_bump_level(
extract_version(old_info),
extract_version(new_info),
args.include_editorial,
args.include_non_editorial):
continue
if action is not None:
updates.append((common_xep, action, new_info))
@ -345,7 +396,7 @@ def main():
if action is not None:
updates.append((added_xep, action, new_info))
if args.process_proto:
if args.include_protoxep:
for added_proto in added_protos:
old_info = dummy_info('xxxx')
new_info = new_proto[added_proto]