From 26d265c811929d03c4d27e5fe53f7de5bde32215 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Thu, 26 Oct 2017 18:48:54 +0200 Subject: docs, tools: add local link checker This commit adds tools/check_links.py script, that checks that all local links from documentation files are valid; fixes some of the invalid links that we had; and makes travis buildbot check them as well. --- tools/check_links.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 tools/check_links.py (limited to 'tools/check_links.py') diff --git a/tools/check_links.py b/tools/check_links.py new file mode 100755 index 000000000..14a8517c1 --- /dev/null +++ b/tools/check_links.py @@ -0,0 +1,66 @@ +#!/usr/bin/python + +import os +import re +import sys + +link_re = re.compile('\[' + '[^\[\]]+' + '\]' + '\(' + '([^\(\)]+)' + '\)') + +if len(sys.argv) < 3: + print 'Usage: ...' + sys.exit(1) + +root = sys.argv[1] +docs = sys.argv[2:] + +links = [] + +for doc in docs: + with open(doc) as f: + data = f.read() + r = link_re.findall(data) + for link in r: + links += [(doc, link)] + +def filter_link((doc, link)): + if link.startswith('http'): + return False + if link.startswith('#'): + return False + return True + +links = filter(filter_link, links) + +def fix_link((doc, link)): + link = link.split('#')[0] + link = link.split('?')[0] + return (doc, link) + +links = map(fix_link, links) + +errors = [] + +def check_link((doc, link)): + path = os.path.dirname(doc) + full_link = None + if link[0] == '/': + link = link[1:] + full_link = os.path.join(root, link) + else: + full_link = os.path.join(root, path, link) + if not os.path.exists(full_link): + return False + return True + +for link in links: + if not check_link(link): + errors += [link] + +if len(errors) == 0: + print '%d links checked: OK' % (len(links),) + sys.exit(0) + +for (doc, link) in errors: + print 'File %s linked from %s not found' % (link, doc) + +sys.exit(2) -- cgit mrf-deployment