diff --git a/src/ac/acl/spec/check_spec.py b/src/ac/acl/spec/check_spec.py index be53129e12ef84f5c3492ddfa2e1a54637529de4..c454800a0a807458130c704881d78aa0352ab72a 100644 --- a/src/ac/acl/spec/check_spec.py +++ b/src/ac/acl/spec/check_spec.py @@ -262,13 +262,17 @@ class CheckSpec(BaseCheck): """ 检查日期合法性 """ - if date_obj[week].upper() not in weeks: - return False - if date_obj[month].upper() not in months: - return False - # 日期,取1-当前月份最大天数 - if not 0 < int(date_obj[day]) <= calendar.monthrange(int(date_obj[year]), - months.index(date_obj[month].upper()) + 1)[1]: + try: + if date_obj[week].upper() not in weeks: + return False + if date_obj[month].upper() not in months: + return False + # 日期,取1-当前月份最大天数 + if not 0 < int(date_obj[day]) <= calendar.monthrange(int(date_obj[year]), + months.index(date_obj[month].upper()) + 1)[1]: + return False + except Exception as error: + logger.error(error) return False return True @@ -330,25 +334,30 @@ class CheckSpec(BaseCheck): if not check_changelog_entries_start(self._spec.changelog): logger.error("%changelog entries must start with *") return False - changelog = self._spec.changelog.split("*") - # 取最新一条changelog - changelog_con = next(need_str for need_str in changelog if need_str) - # 检查changelog中邮箱格式 - if not check_mailbox(changelog_con): - logger.error("bad mailbox in changelog:%s", changelog_con) - return False - # date_obj是字符串列表,样例:['Tue', 'Mar', '21', '2022', 'xxx', '', '-', '2.9.24-5-', 'test', '2.9.24-5'] - date_obj = [con for con in changelog_con.strip(" ").split(" ") if con] # 列表中的空字符串已处理 - if len(date_obj) < 4: # 列表中的字符串至少四个,包含年、月、日、星期 ['Tue', 'Mar', '21', '2022'] - logger.error("bad data in changelog:%s", changelog_con) - return False - if not judgment_date(date_obj): - logger.error("bad date in changelog:%s", changelog_con) - return False - if not release_and_version(changelog_con, self._spec.version, self._spec.release): - logger.error("There is a problem with the version number or release number:%s", changelog_con) - return False - if not bogus_date(date_obj): - logger.error("bogus date in changelog:%s", changelog_con) - return False - return True + + result = True + ss = self._spec.changelog.split("*") + changelogs = [s.strip() for s in ss if s.strip() != ""] + + for index, changelog_con in enumerate(changelogs): + # 检查changelog中邮箱格式 + if not check_mailbox(changelog_con): + logger.error("bad mailbox in changelog:%s", changelog_con) + result = False + # date_obj是字符串列表,样例:['Tue', 'Mar', '21', '2022', 'xxx', '', '-', '2.9.24-5-', 'test', '2.9.24-5'] + date_obj = [con for con in changelog_con.strip(" ").split(" ") if con] # 列表中的空字符串已处理 + if len(date_obj) < 4: # 列表中的字符串至少四个,包含年、月、日、星期 ['Tue', 'Mar', '21', '2022'] + logger.error("bad data in changelog:%s", changelog_con) + result = False + if not judgment_date(date_obj): + logger.error("bad date in changelog:%s", changelog_con) + result = False + # 检查第一条changelog中的版本信息 + if index == 0: + if not release_and_version(changelog_con, self._spec.version, self._spec.release): + logger.error("There is a problem with the version number or release number:%s", changelog_con) + result = False + if not bogus_date(date_obj): + logger.error("bogus date in changelog:%s", changelog_con) + result = False + return result