From ea40bda0c71763b50657aa558c4b0f7823acc42a Mon Sep 17 00:00:00 2001 From: relikd Date: Sat, 14 Nov 2020 20:19:05 +0100 Subject: [PATCH] Check dead or broken links --- Makefile | 4 +++ extras/find-dead-links.py | 32 +++++++++++++++++++ {data => extras}/generate-alternates.py | 0 .../yummysoup-import.py | 0 4 files changed, 36 insertions(+) create mode 100755 extras/find-dead-links.py rename {data => extras}/generate-alternates.py (100%) rename data/export-yummy.py => extras/yummysoup-import.py (100%) diff --git a/Makefile b/Makefile index 4f2d922..b34d795 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,10 @@ server: build: @cd '$(PROJDIR)' && \ lektor build --output-path ../bin --buildstate-path ../build-state -f ENABLE_APPCACHE + @echo + @echo 'Checking dead links ...' + @python3 extras/find-dead-links.py + @echo deploy: @echo diff --git a/extras/find-dead-links.py b/extras/find-dead-links.py new file mode 100755 index 0000000..8809217 --- /dev/null +++ b/extras/find-dead-links.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import os +import re +from contextlib import closing +from mmap import mmap, ACCESS_READ + +rx_a = re.compile(br'[@(]\.\./([^/]*)') + + +def regex_file(file): + with open(file, 'r') as f: + with closing(mmap(f.fileno(), 0, access=ACCESS_READ)) as d: + for x in re.finditer(rx_a, d): + yield x.group(1).decode('utf-8') + + +base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) +dist_dir = os.path.join(base_dir, 'data', 'distribution') +all_ids = None + +for path, dirs, files in os.walk(dist_dir): + if not all_ids: + all_ids = dirs + for lr_file in files: + if not lr_file.endswith('lr'): + continue + for link in regex_file(path + os.path.sep + lr_file): + if link not in all_ids: + short_name = os.path.basename(path) + os.path.sep + lr_file + print(f'dead-link: {short_name} ({link})') + +print('done.') diff --git a/data/generate-alternates.py b/extras/generate-alternates.py similarity index 100% rename from data/generate-alternates.py rename to extras/generate-alternates.py diff --git a/data/export-yummy.py b/extras/yummysoup-import.py similarity index 100% rename from data/export-yummy.py rename to extras/yummysoup-import.py