aboutsummaryrefslogtreecommitdiffstats
path: root/python/tidy
diff options
context:
space:
mode:
authorSiddhartha Mishra <sidm1999@gmail.com>2019-09-21 18:12:41 +0530
committerSiddhartha Mishra <sidm1999@gmail.com>2019-09-22 14:16:46 +0530
commitaa7ba1a850543a147074ec0c693d7bfcdfda9797 (patch)
tree4befbac409916500fcf8bb2b6d00666252d03810 /python/tidy
parent3ced8d4ddcc7328e27231f9db9ce2f441b01d37e (diff)
downloadservo-aa7ba1a850543a147074ec0c693d7bfcdfda9797.tar.gz
servo-aa7ba1a850543a147074ec0c693d7bfcdfda9797.zip
report when blocked package exception is not needed
Diffstat (limited to 'python/tidy')
-rw-r--r--python/tidy/servo_tidy/tidy.py16
-rw-r--r--python/tidy/servo_tidy_tests/blocked_package.lock26
-rw-r--r--python/tidy/servo_tidy_tests/test_tidy.py19
3 files changed, 60 insertions, 1 deletions
diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py
index 1477fe188ab..0069f344fa7 100644
--- a/python/tidy/servo_tidy/tidy.py
+++ b/python/tidy/servo_tidy/tidy.py
@@ -402,18 +402,32 @@ def check_lock(file_name, contents):
yield (1, message)
# 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", []):
package_name = package.get("name")
package_version = package.get("version")
for dependency in package.get("dependencies", []):
dependency = dependency.split()
dependency_name = dependency[0]
- whitelist = config['blocked-packages'].get(dependency_name)
+ whitelist = blocked_packages.get(dependency_name)
if whitelist is not None:
if package_name not in whitelist:
fmt = "Package {} {} depends on blocked package {}."
message = fmt.format(package_name, package_version, dependency_name)
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):
diff --git a/python/tidy/servo_tidy_tests/blocked_package.lock b/python/tidy/servo_tidy_tests/blocked_package.lock
new file mode 100644
index 00000000000..521fdfcfb74
--- /dev/null
+++ b/python/tidy/servo_tidy_tests/blocked_package.lock
@@ -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 = [
+]
diff --git a/python/tidy/servo_tidy_tests/test_tidy.py b/python/tidy/servo_tidy_tests/test_tidy.py
index 280190931c2..b7ec67cf9c9 100644
--- a/python/tidy/servo_tidy_tests/test_tidy.py
+++ b/python/tidy/servo_tidy_tests/test_tidy.py
@@ -229,6 +229,25 @@ class CheckTidiness(unittest.TestCase):
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):
test_path = base_path + 'lints/'
runner = tidy.LintRunner(only_changed_files=False, progress=False)