for commit in self.commits:
for invalid in self.invalids:
if invalid.search(commit.author):
- self.fail('Invalid author %s' % commit.author, 'Resend the series with a valid patch\'s author', commit)
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % commit.author, commit=commit)
def test_non_auh_upgrade(self):
for commit in self.commits:
if self.auh_email in commit.payload:
- self.fail('Invalid author %s in commit message' % self.auh_email, 'Resend the series with a valid patch\'s author', commit)
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % self.auh_email, commit=commit)
for line in commit.commit_message.splitlines():
if self.rexp_detect.match(line):
if not self.rexp_validation.match(line):
- self.fail('Yocto Project bugzilla tag is not correctly formatted',
- 'Specify bugzilla ID in commit description with format: "[YOCTO #<bugzilla ID>]"',
- commit)
+ self.fail('Bugzilla issue ID is not correctly formatted - specify it with format: "[YOCTO #<bugzilla ID>]"', commit=commit)
if self.revert_shortlog_regex.match(commit.shortlog):
continue
if not self.prog.search_string(commit.payload):
- self.fail('Missing or incorrectly formatted CVE tag in mbox',
- 'Correct or include the CVE tag in the mbox with format: "CVE: CVE-YYYY-XXXX"',
- commit)
+ self.fail('Missing or incorrectly formatted CVE tag in mbox. Correct or include the CVE tag in the mbox with format: "CVE: CVE-YYYY-XXXX"',
+ commit=commit)
def test_commit_message_presence(self):
for commit in CommitMessage.commits:
if not commit.commit_message.strip():
- self.fail('Patch is missing a descriptive commit message',
- 'Please include a commit message on your patch explaining the change (most importantly why the change is being made)',
- commit)
+ self.fail('Mbox is missing a descriptive commit message. Please include a commit message on your patch explaining the change', commit=commit)
def test_mbox_format(self):
if self.unidiff_parse_error:
- self.fail('Series cannot be parsed correctly due to malformed diff lines',
- 'Create the series again using git-format-patch and ensure it can be applied using git am',
+ self.fail('Series cannot be parsed correctly due to malformed diff lines. Create the series again using git-format-patch and ensure it can be applied using git am',
data=[('Diff line', re.sub('^.+:\s(?<!$)','',self.unidiff_parse_error))])
for commit in MailingList.commits:
match = project_regex.match(commit.subject)
if match:
- self.fail('Series sent to the wrong mailing list',
- 'Check the project\'s README (%s) and send the patch to the indicated list' % match.group('project'),
- commit)
+ self.fail('Series sent to the wrong mailing list. Check the project\'s README (%s) and send the patch to the indicated list' % match.group('project'),
+ commit=commit)
for patch in self.patchset:
folders = patch.path.split('/')
base_path = folders[0]
for project in [self.bitbake, self.doc, self.oe, self.poky]:
if base_path in project.paths:
- self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists. Send the series again to the correct mailing list (ML)',
data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)),
('Patch\'s path:', patch.path)])
if base_path.startswith('scripts'):
for poky_file in self.poky_scripts:
if patch.path.startswith(poky_file):
- self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists. Send the series again to the correct mailing list (ML)',
data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)])
def test_series_merge_on_head(self):
if not PatchTestInput.repo.ismerged:
commithash, author, date, shortlog = headlog()
- self.fail('Series does not apply on top of target branch',
- 'Rebase your series on top of targeted branch',
+ self.fail('Series does not apply on top of target branch. Rebase your series and ensure the target is correct',
data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))])
try:
parse_shortlog.shortlog.parseString(shortlog)
except pyparsing.ParseException as pe:
- self.fail('Shortlog does not follow expected format',
- 'Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
- commit)
+ self.fail('Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
+ commit=commit)
def test_shortlog_length(self):
for commit in Shortlog.commits:
continue
l = len(shortlog)
if l > maxlength:
- self.fail('Commit shortlog is too long',
- 'Edit shortlog so that it is %d characters or less (currently %d characters)' % (maxlength, l),
- commit)
+ self.fail('Edit shortlog so that it is %d characters or less (currently %d characters)' % (maxlength, l),
+ commit=commit)
if self.revert_shortlog_regex.match(commit.shortlog):
continue
if not SignedOffBy.prog.search_string(commit.payload):
- self.fail('Patch is missing Signed-off-by',
- 'Sign off the patch (either manually or with "git commit --amend -s")',
- commit)
+ self.fail('Mbox is missing Signed-off-by. Add it manually or with "git commit --amend -s"',
+ commit=commit)
if rd.getVar(self.license) == self.closed:
continue
if not lic_files_chksum:
- self.fail('%s is missing in newly added recipe' % self.metadata,
- 'Specify the variable %s in %s' % (self.metadata, pn))
+ self.fail('%s is missing in newly added recipe' % self.metadata)
def pretest_lic_files_chksum_modified_not_mentioned(self):
if not self.modified:
if self.lictag_re.search(commit.commit_message):
break
else:
- self.fail('LIC_FILES_CHKSUM changed on target %s but there is no "%s" tag in commit message' % (pn, self.lictag),
- 'Include "%s: <description>" into the commit message with a brief description' % self.lictag,
+ self.fail('LIC_FILES_CHKSUM changed on target %s but there is no "%s" tag in commit message. Include it with a brief description' % (pn, self.lictag),
data=[('Current checksum', pretest), ('New checksum', test)])
fd.write(''.join(lines[:-1]))
if no_license:
- self.fail('Recipe does not have the LICENSE field set', 'Include a LICENSE into the new recipe')
+ self.fail('Recipe does not have the LICENSE field set.')
if self.add_mark.match(line):
current_line_length = len(line[1:])
if current_line_length > self.max_length:
- self.fail('Patch line too long (current length %s)' % current_line_length,
- 'Shorten the corresponding patch line (max length supported %s)' % self.max_length,
+ self.fail('Patch line too long (current length %s, maximum is %s)' % (current_line_length, self.max_length),
data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])])
# TODO: we are not taking into account renames, so test may raise false positives
not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset
if not_removed:
- self.fail('Patches not removed from tree',
- 'Amend the patch containing the software patch file removal',
+ self.fail('Patches not removed from tree. Remove them and amend the submitted mbox',
data=[('Patch', f) for f in not_removed])
# "${PN} version ${PN}-${PR}" is the default, so fail if default
if summary.startswith('%s version' % pn):
- self.fail('%s is missing in newly added recipe' % self.metadata,
- 'Specify the variable %s in %s' % (self.metadata, pn))
+ self.fail('%s is missing in newly added recipe' % self.metadata)
tag_found = True
break
if not tag_found:
- self.fail('Missing or incorrectly formatted CVE tag in included patch file',
- 'Correct or include the CVE tag on cve patch with format: "CVE: CVE-YYYY-XXXX"',
- commit)
+ self.fail('Missing or incorrectly formatted CVE tag in patch file. Correct or include the CVE tag in the patch with format: "CVE: CVE-YYYY-XXXX"',
+ commit=commit)
if PatchSignedOffBy.prog.search_string(payload):
break
else:
- self.fail('A patch file has been added, but does not have a Signed-off-by tag',
- 'Sign off the added patch file (%s)' % newpatch.path)
+ self.fail('A patch file has been added, but does not have a Signed-off-by tag. Sign off the added patch file (%s)' % newpatch.path)
for newpatch in PatchUpstreamStatus.newpatches:
payload = newpatch.__str__()
if not self.upstream_status_regex.search_string(payload):
- self.fail('Added patch file is missing Upstream-Status in the header',
- 'Add Upstream-Status: <Valid status> to the header of %s' % newpatch.path,
+ self.fail('Added patch file is missing Upstream-Status in the header. Add Upstream-Status: <Valid status> to the header',
data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)])
for line in payload.splitlines():
if self.patchmetadata_regex.match(line):
parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is Inappropriate, but no reason was provided',
- 'Include a brief reason why %s is inappropriate' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')])
elif parse_upstream_status.submitted_status_mark.searchString(line):
try:
parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is Submitted, but it is not mentioned where',
- 'Include where %s was submitted' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')])
else:
try:
parse_upstream_status.upstream_status.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is in incorrect format',
- 'Fix Upstream-Status format in %s' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)])
for issue in self.pylint_test:
if self.pylint_test[issue] not in self.pylint_pretest.values():
- self.fail('Errors in your Python code were encountered',
- 'Correct the lines introduced by your patch',
+ self.fail('Errors in your Python code were encountered. Please check your code with a linter and resubmit',
data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])])