mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00

The patchtest tests provide vague feedback to the user, and many of them also provide redundant 'fix' strings that could easily be incorporated into the issue messages themselves. Simplify them so that it is more clear what the errors are and how they can be addressed. No recommendation is given when the issue string adequately conveys the issue, e.g. with a missing "LICENSE" entry in a newly-created recipe. (From OE-Core rev: 0bfb3614244ec7aa79b6424bc63f9f2bccdabe98) Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
# Checks related to the patch's SRC_URI metadata variable
|
|
#
|
|
# Copyright (C) 2016 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import subprocess
|
|
import base
|
|
import re
|
|
import os
|
|
from data import PatchTestInput, PatchTestDataStore
|
|
|
|
class SrcUri(base.Metadata):
|
|
|
|
metadata = 'SRC_URI'
|
|
md5sum = 'md5sum'
|
|
sha256sum = 'sha256sum'
|
|
git_regex = re.compile('^git\:\/\/.*')
|
|
|
|
def setUp(self):
|
|
# these tests just make sense on patches that can be merged
|
|
if not PatchTestInput.repo.canbemerged:
|
|
self.skip('Patch cannot be merged')
|
|
|
|
def pretest_src_uri_left_files(self):
|
|
if not self.modified:
|
|
self.skip('No modified recipes, skipping pretest')
|
|
|
|
# get the proper metadata values
|
|
for pn in self.modified:
|
|
# we are not interested in images
|
|
if 'core-image' in pn:
|
|
continue
|
|
rd = self.tinfoil.parse_recipe(pn)
|
|
PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
|
|
|
|
def test_src_uri_left_files(self):
|
|
if not self.modified:
|
|
self.skip('No modified recipes, skipping pretest')
|
|
|
|
# get the proper metadata values
|
|
for pn in self.modified:
|
|
# we are not interested in images
|
|
if 'core-image' in pn:
|
|
continue
|
|
rd = self.tinfoil.parse_recipe(pn)
|
|
PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
|
|
|
|
for pn in self.modified:
|
|
pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
|
|
test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
|
|
|
|
pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')])
|
|
test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')])
|
|
|
|
# check if files were removed
|
|
if len(test_files) < len(pretest_files):
|
|
|
|
# get removals from patchset
|
|
filesremoved_from_patchset = set()
|
|
for patch in self.patchset:
|
|
if patch.is_removed_file:
|
|
filesremoved_from_patchset.add(os.path.basename(patch.path))
|
|
|
|
# get the deleted files from the SRC_URI
|
|
filesremoved_from_usr_uri = pretest_files - test_files
|
|
|
|
# finally, get those patches removed at SRC_URI and not removed from the patchset
|
|
# 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. Remove them and amend the submitted mbox',
|
|
data=[('Patch', f) for f in not_removed])
|
|
|