| #!/usr/bin/env python |
| # -*- coding: utf-8 -*- |
| |
| import sys |
| |
| if len(sys.argv) < 2: |
| print("Invalid usage of file_format.py, it should be called with a path to one or multiple files.") |
| sys.exit(1) |
| |
| BOM = b"\xef\xbb\xbf" |
| |
| changed = [] |
| invalid = [] |
| |
| for file in sys.argv[1:]: |
| try: |
| with open(file, "rt", encoding="utf-8") as f: |
| original = f.read() |
| except UnicodeDecodeError: |
| invalid.append(file) |
| continue |
| |
| if original == "": |
| continue |
| |
| EOL = "\r\n" if file.endswith((".csproj", ".sln", ".bat")) else "\n" |
| WANTS_BOM = file.endswith((".csproj", ".sln")) |
| |
| revamp = EOL.join([line.rstrip("\n\r\t ") for line in original.splitlines(True)]).rstrip(EOL) + EOL |
| |
| new_raw = revamp.encode(encoding="utf-8") |
| if not WANTS_BOM and new_raw.startswith(BOM): |
| new_raw = new_raw[len(BOM) :] |
| elif WANTS_BOM and not new_raw.startswith(BOM): |
| new_raw = BOM + new_raw |
| |
| with open(file, "rb") as f: |
| old_raw = f.read() |
| |
| if old_raw != new_raw: |
| changed.append(file) |
| with open(file, "wb") as f: |
| f.write(new_raw) |
| |
| if changed: |
| for file in changed: |
| print(f"FIXED: {file}") |
| |
| if invalid: |
| for file in invalid: |
| print(f"REQUIRES MANUAL CHANGES: {file}") |
| sys.exit(1) |