39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
"""第二遍:对残留的旧路径引用,按 basename 在当前 docs 反查真实落点。"""
|
||
|
|
import os, re, json, collections
|
||
|
|
|
||
|
|
ROOT = "docs"
|
||
|
|
OLD_DIRS = ["02-产品需求", "03-技术架构", "04-原型设计",
|
||
|
|
"09-部署运维", "10-项目管理", "01-产品设计", "06-测试质量"]
|
||
|
|
|
||
|
|
# 当前 docs 所有文件:basename -> 完整相对路径列表
|
||
|
|
basemap = collections.defaultdict(list)
|
||
|
|
for root, _, fs in os.walk(ROOT):
|
||
|
|
for f in fs:
|
||
|
|
full = os.path.normpath(os.path.join(root, f))
|
||
|
|
rel = os.path.relpath(full, ROOT).replace(os.sep, '/')
|
||
|
|
basemap[f].append(rel)
|
||
|
|
|
||
|
|
# 扫描残留引用
|
||
|
|
pat = re.compile(r'(?:%s)/[^\s\)\]]+' % '|'.join(OLD_DIRS))
|
||
|
|
refs = collections.defaultdict(set) # basename -> set of old refs
|
||
|
|
for root, _, fs in os.walk(ROOT):
|
||
|
|
for f in fs:
|
||
|
|
if not f.endswith('.md'):
|
||
|
|
continue
|
||
|
|
fp = os.path.join(root, f)
|
||
|
|
with open(fp, encoding='utf-8') as fh:
|
||
|
|
for line in fh:
|
||
|
|
for m in pat.finditer(line):
|
||
|
|
oldref = m.group(0)
|
||
|
|
bn = oldref.split('/')[-1]
|
||
|
|
refs[bn].add(oldref)
|
||
|
|
|
||
|
|
print("残留引用涉及的不同 basename 数:", len(refs))
|
||
|
|
for bn, olds in sorted(refs.items()):
|
||
|
|
locs = basemap.get(bn, [])
|
||
|
|
status = "FOUND@" + "; ".join(locs) if locs else "*** NOT FOUND (死链?) ***"
|
||
|
|
print("\n%s" % bn)
|
||
|
|
print(" 旧引用:", "; ".join(sorted(olds)))
|
||
|
|
print(" 现状:", status)
|