File tree Expand file tree Collapse file tree 3 files changed +44
-26
lines changed
Expand file tree Collapse file tree 3 files changed +44
-26
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 44# The JSON DB is used by the Firefox addon.
55#
66
7- import glob
87import locale
98import json
109import os
11- import re
12- import sqlite3
13- import subprocess
1410import sys
1511
1612import collections
1713from 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
3533xpath_host = etree .XPath ("/ruleset/target/@host" )
3634xpath_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 )
Original file line number Diff line number Diff line change 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 () ]
You can’t perform that action at this time.
0 commit comments