|
22 | 22 | default="", |
23 | 23 | help="Duplicate directory." |
24 | 24 | ) |
| 25 | +parser.add_argument('--quiet', action="store_true", |
| 26 | + default=false, help="Surpress debug output." |
| 27 | + ) |
25 | 28 | parser.add_argument('ruleset', metavar='XML directory', type=str, nargs="*", |
26 | 29 | default="src/chrome/content/rules", |
27 | 30 | help='Directory of XML files to validate.') |
|
30 | 33 |
|
31 | 34 | ignoredups = [re.compile(val) for val in args.ignoredups] |
32 | 35 | dupdir = [val for val in args.dupdir] |
| 36 | +quiet = args.quiet |
| 37 | + |
| 38 | +def warn(s): |
| 39 | + if not quiet: sys.stdout.write("warning: %s\n" % s) |
| 40 | + |
| 41 | +def fail(s): |
| 42 | + sys.stdout.write("failure: %s\n" % s) |
33 | 43 |
|
34 | 44 | def test_not_anchored(tree): |
35 | 45 | # Rules not anchored to the beginning of a line. |
@@ -59,8 +69,8 @@ def test_missing_to(tree): |
59 | 69 | """Rule is missing a 'to' value.""" |
60 | 70 | for rule in tree.xpath("/ruleset/rule"): |
61 | 71 | if not rule.get("to"): |
62 | | - sys.stdout.write("warning: 'to' attribute missing in %s. " %fi) |
63 | | - sys.stdout.write("Misplaced end or misnamed element?\n") |
| 72 | + warn("'to' attribute missing in %s. " %fi) |
| 73 | + warn("Misplaced end or misnamed element?") |
64 | 74 | return False |
65 | 75 | return True |
66 | 76 |
|
@@ -109,11 +119,9 @@ def test_unencrypted_to(tree): |
109 | 119 | if to[:6] != "https:" and to[:5] != "http:": |
110 | 120 | return False |
111 | 121 | elif to[:5] == "http:" and downgrade: |
112 | | - sys.stdout.write("warning: downgrade rule in %s redirects " % fi) |
113 | | - sys.stdout.write("to http.\n") |
| 122 | + warn("downgrade rule in %s redirects to http." % fi) |
114 | 123 | elif to[:5] == "http:": |
115 | | - sys.stdout.write("error: rule in %s redirects to http and " % fi) |
116 | | - sys.stdout.write("downgrade attribute not specified.\n") |
| 124 | + fail("non-downgrade rule in %s redirects to http." % fi) |
117 | 125 | return False |
118 | 126 | return True |
119 | 127 |
|
@@ -218,35 +226,35 @@ def nomes_all(where=sys.argv[1:]): |
218 | 226 | tree = etree.parse(fi) |
219 | 227 | if fi[-4:] != ".xml": |
220 | 228 | if tree.xpath("/ruleset"): |
221 | | - sys.stdout.write("warning: ruleset in file without .xml extension: %s\n" % fi) |
| 229 | + warn("ruleset in file without .xml extension: %s" % fi) |
222 | 230 | else: |
223 | 231 | continue |
224 | 232 | seen_file = True |
225 | 233 | except Exception as oops: |
226 | 234 | if fi[-4:] != ".xml": |
227 | 235 | continue |
228 | 236 | failure = 1 |
229 | | - sys.stderr.write("%s failed XML validity: %s\n" % (fi, oops)) |
| 237 | + fail("%s failed XML validity: %s\n" % (fi, oops)) |
230 | 238 | if failure or not tree.xpath("/ruleset"): |
231 | 239 | continue |
232 | 240 | if not test_ruleset_name(tree): |
233 | 241 | failure = 1 |
234 | | - sys.stderr.write("failure: unnamed ruleset: %s\n" % fi) |
| 242 | + fail("unnamed ruleset: %s" % fi) |
235 | 243 | continue |
236 | 244 | ruleset_name = tree.xpath("/ruleset/@name")[0] |
237 | 245 | if ruleset_name in all_names: |
238 | 246 | failure = 1 |
239 | | - sys.stdout.write("failure: duplicate ruleset name %s\n" % ruleset_name) |
| 247 | + fail("duplicate ruleset name %s" % ruleset_name) |
240 | 248 | all_names.add(ruleset_name) |
241 | 249 | for test in tests: |
242 | 250 | if not test(tree): |
243 | 251 | failure = 1 |
244 | | - sys.stderr.write("failure: %s failed test: %s\n" % (fi, test.__doc__)) |
| 252 | + fail("%s failed test: %s" % (fi, test.__doc__)) |
245 | 253 | for target in tree.xpath("/ruleset/target/@host"): |
246 | 254 | if target in all_targets and not any(ign.search(target) for ign in ignoredups): |
247 | 255 | # suppress warning about duplicate targets if an --ignoredups |
248 | 256 | # pattern matches target |
249 | | - sys.stdout.write("warning: %s has duplicate target: %s\n" % (fi, target)) |
| 257 | + warn("%s has duplicate target: %s" % (fi, target)) |
250 | 258 | all_targets.add(target) |
251 | 259 |
|
252 | 260 | if not seen_file: |
|
0 commit comments