# -*- coding: utf-8 -*- r'''修 README.md 和 docs/ 两份装机文档里过期的版本号。 现状: README.md 三件套文件名 / 编译产物路径写成 1.5.0、1.8.0 BEFORE-INSTALL.txt 抬头和落款写成 1.7.1 AFTER-INSTALL.txt 抬头 / 版本记录 / 落款写成 1.7.1 目标版本:1.8.2(和 relay.py / AndroidManifest / installer 一致) 只改版本号本身,不动措辞 —— 措辞的修改用 edit 工具单独做, 这样每一步都能看清楚改了什么。 ''' from __future__ import annotations import re import sys from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") TARGET = "1.8.2" FILES = [ "README.md", "docs/BEFORE-INSTALL.txt", "docs/AFTER-INSTALL.txt", ] # 只替换这些"产品版本号"形态,避免误伤日期、端口号之类: # ykxmz-xxx-1.5.0.zip / ykxmz-watch-1.5.0.apk / 版本:1.7.1 / 软件:ykxmz 1.7.1 PATTERNS = [ # 文件名里的版本:ykxmz-agent-1.5.0.zip、ykxmz-watch-1.8.0.apk (re.compile(r"(ykxmz-[a-z]+-)\d+\.\d+\.\d+"), r"\g<1>" + TARGET), # 抬头/落款:版本:1.7.1 / 软件:ykxmz 1.7.1 (re.compile(r"(版本[::]\s*)\d+\.\d+\.\d+"), r"\g<1>" + TARGET), (re.compile(r"(软件[::]\s*ykxmz\s*)\d+\.\d+\.\d+"), r"\g<1>" + TARGET), # 编译产物注释:# 产物:dist\ykxmz-watch-1.5.0.apk(上面已覆盖) ] def main() -> int: print(" 目标版本 %s" % TARGET) print() total = 0 for rel in FILES: path = ROOT / rel if not path.is_file(): print(" [跳过] %s 不存在" % rel) continue raw = path.read_bytes() bom = raw.startswith(b"\xef\xbb\xbf") text = raw.decode("utf-8-sig") before = text hits = [] for pattern, repl in PATTERNS: for match in pattern.finditer(text): hits.append(match.group(0).strip()) text = pattern.sub(repl, text) if text != before: data = text.encode("utf-8") if bom: data = b"\xef\xbb\xbf" + data path.write_bytes(data) print(" %s 改了 %d 处" % (rel, len(hits))) for h in hits: print(" %s" % h) total += len(hits) else: print(" %s 没有需要改的版本号" % rel) print() print(" 共改 %d 处" % total) # 复核:看还有没有残留的旧版本号 print() print(" 残留检查:") stale = re.compile(r"\b1\.[0-7]\.\d+\b") for rel in FILES: path = ROOT / rel if not path.is_file(): continue for i, line in enumerate( path.read_text(encoding="utf-8-sig").splitlines(), 1): for m in stale.finditer(line): print(" ! %s:%d %s" % (rel, i, line.strip()[:80])) return 0 if __name__ == "__main__": sys.exit(main())