44# http://creativecommons.org/licenses/by-sa/3.0.
55
66import argparse
7+ from fnmatch import fnmatch
78from glob import glob
89import io
910import os
1819IGNORED_FILENAME = os .path .join (HERE , 'ignored.yaml' )
1920ROOT = os .path .abspath (os .path .join (HERE , '..' , '..' ))
2021HTML_DIR = os .path .join (ROOT , 'build' , 'html' )
21- IGNORED_FILES = [
22+ IGNORED_FILES = set ( [
2223 'genindex.html'
23- ]
24+ ])
2425
2526
2627def find_all_named_anchors (filename ):
@@ -61,9 +62,13 @@ def find_all_named_anchors_in_files(files):
6162 return links
6263
6364
64- def find_links ():
65+ def find_links (ignored_files ):
6566 files = glob ('**/*.html' , recursive = True )
66- files = filter (lambda name : name not in IGNORED_FILES , files )
67+ ignored_files = ignored_files | IGNORED_FILES
68+ files = [
69+ filename for filename in files
70+ if not any (
71+ [fnmatch (filename , pattern ) for pattern in ignored_files ])]
6772 return find_all_named_anchors_in_files (files )
6873
6974
@@ -87,7 +92,9 @@ def load_redirects():
8792def load_ignored ():
8893 with io .open (IGNORED_FILENAME , 'r' ) as ignored_file :
8994 raw = yaml .load (ignored_file )
90- return set ([entry ['url' ] for entry in raw ])
95+ sources = set ([entry ['glob' ] for entry in raw ['sources' ]])
96+ urls = set ([entry ['url' ] for entry in raw ['urls' ]])
97+ return sources , urls
9198
9299
93100def expand_redirects (redirects , inventory , ignored ):
@@ -152,11 +159,11 @@ def check_command(args):
152159 # TODO: Add another file to list currently defined redirects.
153160 inventory = load_inventory ()
154161 redirects = load_redirects ()
155- ignored = load_ignored ()
156- links = find_links ()
162+ ignored_sources , ignored_urls = load_ignored ()
163+ links = find_links (ignored_sources )
157164
158165 valid_redirects , missing_redirects = expand_redirects (
159- redirects , inventory , ignored )
166+ redirects , inventory , ignored_urls )
160167 if missing_redirects :
161168 print (
162169 'The following redirects are missing deep link anchors in the '
@@ -169,7 +176,7 @@ def check_command(args):
169176
170177 ignored_links = set ()
171178 for link in missing_links :
172- for source_url in ignored :
179+ for source_url in ignored_urls :
173180 if link .startswith (source_url ):
174181 ignored_links .add (link )
175182
0 commit comments