Skip to content

Commit 8a83831

Browse files
authored
Merge pull request EFForg#6679 from Hainish/fix-validate-filenames-test
Ensure ruleset filename validation happens on ruleset PRs
2 parents ba7d925 + 0f97279 commit 8a83831

File tree

3 files changed

+44
-26
lines changed

3 files changed

+44
-26
lines changed

test/travis.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ if [ "$RULESETS_CHANGED" ]; then
5555
echo >&2 "Performing comprehensive coverage test."
5656
docker_build
5757
docker run --rm -ti -v $(pwd):/opt httpse python utils/trivial-validate.py
58+
docker run --rm -ti -v $(pwd):/opt httpse python utils/ruleset_filenames_validate.py
5859
docker run --rm -ti -v $(pwd):/opt httpse bash -c "test/rules.sh"
5960
fi
6061

utils/make-json.py

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@
44
# The JSON DB is used by the Firefox addon.
55
#
66

7-
import glob
87
import locale
98
import json
109
import os
11-
import re
12-
import sqlite3
13-
import subprocess
1410
import sys
1511

1612
import collections
1713
from lxml import etree
1814

15+
from ruleset_filenames_validate import validate_filenames
16+
1917
# Explicitly set locale so sorting order for filenames is consistent.
2018
# This is important for deterministic builds.
2119
# https://trac.torproject.org/projects/tor/ticket/11630#comment:20
@@ -35,28 +33,7 @@
3533
xpath_host = etree.XPath("/ruleset/target/@host")
3634
xpath_ruleset = etree.XPath("/ruleset")
3735

38-
# Sort filenames so output is deterministic.
39-
filenames = sorted(glob.glob('src/chrome/content/rules/*'))
40-
41-
counted_lowercase_names = collections.Counter([name.lower() for name in filenames])
42-
most_common_entry = counted_lowercase_names.most_common(1)[0]
43-
if most_common_entry[1] > 1:
44-
dupe_filename = re.compile(re.escape(most_common_entry[0]), re.IGNORECASE)
45-
print("%s failed case-insensitivity testing." % filter(dupe_filename.match, filenames))
46-
print("Rules exist with identical case-insensitive names, which breaks some filesystems.")
47-
sys.exit(1)
48-
49-
for fi in filenames:
50-
basename = fi.split(os.path.sep)[-1]
51-
if basename == '00README' or basename == 'make-trivial-rule' or basename == 'default.rulesets':
52-
continue
53-
54-
if " " in fi:
55-
print("%s failed validity: Rule filenames cannot contain spaces" % (fi))
56-
sys.exit(1)
57-
if not fi.endswith('.xml'):
58-
print("%s failed validity: Rule filenames must end in .xml" % (fi))
59-
sys.exit(1)
36+
for fi in validate_filenames():
6037

6138
try:
6239
tree = etree.parse(fi, parser)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env python2.7
2+
#
3+
# Validates and provides a generator for ruleset filenames
4+
#
5+
6+
import glob
7+
import os
8+
import re
9+
import sys
10+
11+
import collections
12+
13+
def validate_filenames():
14+
# Sort filenames so output is deterministic.
15+
filenames = sorted(glob.glob('src/chrome/content/rules/*'))
16+
17+
counted_lowercase_names = collections.Counter([name.lower() for name in filenames])
18+
most_common_entry = counted_lowercase_names.most_common(1)[0]
19+
if most_common_entry[1] > 1:
20+
dupe_filename = re.compile(re.escape(most_common_entry[0]), re.IGNORECASE)
21+
print("%s failed case-insensitivity testing." % filter(dupe_filename.match, filenames))
22+
print("Rules exist with identical case-insensitive names, which breaks some filesystems.")
23+
sys.exit(1)
24+
25+
for fi in filenames:
26+
basename = fi.split(os.path.sep)[-1]
27+
if basename == '00README' or basename == 'make-trivial-rule' or basename == 'default.rulesets':
28+
continue
29+
30+
if " " in fi:
31+
print("%s failed validity: Rule filenames cannot contain spaces" % (fi))
32+
sys.exit(1)
33+
if not fi.endswith('.xml'):
34+
print("%s failed validity: Rule filenames must end in .xml" % (fi))
35+
sys.exit(1)
36+
37+
yield fi
38+
39+
if __name__ == "__main__":
40+
[ fi for fi in validate_filenames() ]

0 commit comments

Comments
 (0)