# -*- coding: utf-8 -*- r'''把指定文件的换行统一成 LF(并去掉 BOM)。 为什么需要: 仓库里 12 个 .java 有 10 个是 LF,只有 Discovery.java / DiscoveryCore.java 是 CRLF —— 而且**提交进索引的就是 CRLF**(git ls-files --eol 显示 i/crlf w/crlf), 不是本地签出造成的。项目约定是「.java 一律 LF」,所以顺手归一。 注意:归一之后 git diff 会显示整文件改写(因为索引里是 CRLF)。 这是可预期的,不是把代码改乱了 —— 提交信息里会说明。 用法: python _build/normalize_lf.py <文件> [<文件> ...] ''' from __future__ import annotations import sys from pathlib import Path BOM = b"\xef\xbb\xbf" def main() -> int: if len(sys.argv) < 2: print(" 用法: python _build/normalize_lf.py <文件> ...") return 2 changed = 0 for arg in sys.argv[1:]: path = Path(arg) if not path.is_file(): print(" [跳过] %s 不是文件" % arg) continue raw = path.read_bytes() original = raw if raw.startswith(BOM): raw = raw[len(BOM):] raw = raw.replace(b"\r\n", b"\n").replace(b"\r", b"\n") if raw == original: print(" [不变] %s 已经是 LF 无 BOM" % arg) continue path.write_bytes(raw) changed += 1 print(" [已改] %s -> LF 无 BOM" % arg) print() print(" 共归一 %d 个文件" % changed) return 0 if __name__ == "__main__": raise SystemExit(main())