# -*- coding: utf-8 -*- r'''修 license-combined.txt 里那份**没过期的**协议版本号。 这个文件是三份文档拼起来的(许可协议 + 安装前必读 + 版本记录), 每份都有自己的头部版本号和落款。实测第一份的头部还写着 1.7.1: 第 6 行: '版本:1.7.1' <- 头部,要改 第 153 行: ' 软件:ykxmz 1.7.1' <- 落款,要改 第 540 行: ' 1.7.1' <- **版本记录**(变更日志), 历史条目,**不能改** 前两次我用的整体 replace 都不够精确: * 第一次 `text.replace('版本:1.7.1', ...)` 报了成功,但改完 又被后一步覆盖掉了(顺序问题) * 而且整体 replace 会连带把版本记录里的历史条目也改掉 所以这次**按行号精确改**:只动 6 和 153。 ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent FILE = ROOT / "installer" / "license-combined.txt" NEW = "1.9.0" def main() -> int: raw = FILE.read_bytes() had_bom = raw.startswith(b"\xef\xbb\xbf") text = raw.decode("utf-8-sig") lines = text.splitlines() changed = [] # 按内容精确匹配,避免行号漂移 for i, ln in enumerate(lines): s = ln.strip() # 头部:版本:X.Y.Z if s.startswith("版本:") and s != ("版本:" + NEW): old = s lines[i] = ln.replace(s, "版本:" + NEW) changed.append((i + 1, old, lines[i].strip())) # 落款:软件:ykxmz X.Y.Z elif s.startswith("软件:ykxmz ") and s != ("软件:ykxmz " + NEW): old = s lines[i] = ln.replace(s, "软件:ykxmz " + NEW) changed.append((i + 1, old, lines[i].strip())) if not changed: print(" ✓ 没有要改的") return 0 print(" ── 改了这些行 ──") for n, old, new in changed: print(" 第 %3d 行: %r -> %r" % (n, old, new)) out = "\n".join(lines) + "\n" FILE.write_bytes((b"\xef\xbb\xbf" if had_bom else b"") + out.encode("utf-8")) # 复核:版本记录那一段不许动 after = FILE.read_text(encoding="utf-8-sig") if "八、版本记录" not in after: print(" ✗ 版本记录那一段不见了!") return 1 seg = after.split("八、版本记录", 1)[1] if " 1.7.1" not in seg: print(" ⚠ 版本记录里的历史条目 1.7.1 被改掉了 —— 那是不该动的") return 1 print(" ✓ 版本记录里的历史条目(1.7.1)保持原样") return 0 if __name__ == "__main__": sys.exit(main())