| #!/usr/bin/env python3 |
| |
| import os |
| import sys |
| import subprocess |
| |
| |
| def main(): |
| """Invoked by the built-in `ktfmt` hook in repohooks. |
| |
| Handles two modes based on the contract defined in rh/hooks.py: |
| 1. Check mode (receives `--dry-run`): Runs `./gradlew :ktCheckFile --file=...` |
| 2. Fix mode (receives no flags): Runs `./gradlew :ktCheckFile --format --file=...` |
| |
| Contract reference: |
| https://android.googlesource.com/platform/tools/repohooks/+/refs/heads/androidx-main/rh/hooks.py |
| """ |
| args = sys.argv[1:] |
| is_check = False |
| files = [] |
| |
| for arg in args: |
| if arg == "--dry-run": |
| is_check = True |
| elif not arg.startswith("-"): |
| files.append(arg) |
| |
| if not files: |
| sys.exit(0) |
| |
| project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| gradlew = os.path.join(project_root, "gradlew") |
| |
| cmd = [gradlew, "-q", "-p", project_root, "--continue", ":ktCheckFile"] |
| |
| if not is_check: |
| cmd.append("--format") |
| |
| for f in files: |
| cmd.append(f"--file={f}") |
| |
| try: |
| result = subprocess.run(cmd, capture_output=True, text=True) |
| |
| if is_check: |
| if result.returncode != 0: |
| print(result.stdout) |
| print(result.stderr, file=sys.stderr) |
| sys.exit(result.returncode) |
| else: |
| sys.exit(0) |
| else: |
| print(result.stdout) |
| print(result.stderr, file=sys.stderr) |
| sys.exit(result.returncode) |
| |
| except Exception as e: |
| print(f"Error running Gradle: {e}", file=sys.stderr) |
| sys.exit(1) |
| |
| if __name__ == "__main__": |
| main() |