mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
report when blocked package exception is not needed
This commit is contained in:
parent
3ced8d4ddc
commit
aa7ba1a850
3 changed files with 60 additions and 1 deletions
|
@ -402,18 +402,32 @@ def check_lock(file_name, contents):
|
||||||
yield (1, message)
|
yield (1, message)
|
||||||
|
|
||||||
# Check to see if we are transitively using any blocked packages
|
# Check to see if we are transitively using any blocked packages
|
||||||
|
blocked_packages = config["blocked-packages"]
|
||||||
|
# Create map to keep track of visited exception packages
|
||||||
|
visited_whitelisted_packages = {package: {} for package in blocked_packages.keys()}
|
||||||
|
|
||||||
for package in content.get("package", []):
|
for package in content.get("package", []):
|
||||||
package_name = package.get("name")
|
package_name = package.get("name")
|
||||||
package_version = package.get("version")
|
package_version = package.get("version")
|
||||||
for dependency in package.get("dependencies", []):
|
for dependency in package.get("dependencies", []):
|
||||||
dependency = dependency.split()
|
dependency = dependency.split()
|
||||||
dependency_name = dependency[0]
|
dependency_name = dependency[0]
|
||||||
whitelist = config['blocked-packages'].get(dependency_name)
|
whitelist = blocked_packages.get(dependency_name)
|
||||||
if whitelist is not None:
|
if whitelist is not None:
|
||||||
if package_name not in whitelist:
|
if package_name not in whitelist:
|
||||||
fmt = "Package {} {} depends on blocked package {}."
|
fmt = "Package {} {} depends on blocked package {}."
|
||||||
message = fmt.format(package_name, package_version, dependency_name)
|
message = fmt.format(package_name, package_version, dependency_name)
|
||||||
yield (1, message)
|
yield (1, message)
|
||||||
|
else:
|
||||||
|
visited_whitelisted_packages[dependency_name][package_name] = True
|
||||||
|
|
||||||
|
# Check if all the exceptions to blocked packages actually depend on the blocked package
|
||||||
|
for dependency_name, package_names in blocked_packages.iteritems():
|
||||||
|
for package_name in package_names:
|
||||||
|
if not visited_whitelisted_packages[dependency_name].get(package_name):
|
||||||
|
fmt = "Package {} is not required to be an exception of blocked package {}."
|
||||||
|
message = fmt.format(package_name, dependency_name)
|
||||||
|
yield (1, message)
|
||||||
|
|
||||||
|
|
||||||
def check_toml(file_name, lines):
|
def check_toml(file_name, lines):
|
||||||
|
|
26
python/tidy/servo_tidy_tests/blocked_package.lock
Normal file
26
python/tidy/servo_tidy_tests/blocked_package.lock
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
[root]
|
||||||
|
name = "servo"
|
||||||
|
version = "0.0.1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "test_blocked"
|
||||||
|
version = "0.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "test_exception"
|
||||||
|
version = "0.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "test_unneeded_exception"
|
||||||
|
version = "0.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
]
|
|
@ -229,6 +229,25 @@ class CheckTidiness(unittest.TestCase):
|
||||||
|
|
||||||
self.assertNoMoreErrors(errors)
|
self.assertNoMoreErrors(errors)
|
||||||
|
|
||||||
|
def test_lock_exceptions(self):
|
||||||
|
tidy.config["blocked-packages"]["rand"] = ["test_exception", "test_unneeded_exception"]
|
||||||
|
errors = tidy.collect_errors_for_files(iterFile('blocked_package.lock'), [tidy.check_lock], [], print_text=False)
|
||||||
|
|
||||||
|
msg = (
|
||||||
|
"Package test_blocked 0.0.2 depends on blocked package rand."
|
||||||
|
)
|
||||||
|
|
||||||
|
msg2 = (
|
||||||
|
"Package test_unneeded_exception is not required to be an exception of blocked package rand."
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(msg, errors.next()[2])
|
||||||
|
self.assertEqual(msg2, errors.next()[2])
|
||||||
|
self.assertNoMoreErrors(errors)
|
||||||
|
|
||||||
|
# needed to not raise errors in other test cases
|
||||||
|
tidy.config["blocked-packages"]["rand"] = []
|
||||||
|
|
||||||
def test_lint_runner(self):
|
def test_lint_runner(self):
|
||||||
test_path = base_path + 'lints/'
|
test_path = base_path + 'lints/'
|
||||||
runner = tidy.LintRunner(only_changed_files=False, progress=False)
|
runner = tidy.LintRunner(only_changed_files=False, progress=False)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue