|
1 | 1 | import subprocess |
2 | 2 | import sys |
| 3 | +import os |
| 4 | +from datasets import load_dataset |
3 | 5 | from pathlib import Path |
4 | | -from typing import List |
| 6 | +from typing import Iterator |
| 7 | + |
| 8 | +from commit0.harness.constants import ( |
| 9 | + RepoInstance, |
| 10 | +) |
5 | 11 |
|
6 | 12 |
|
7 | 13 | config = """repos: |
|
28 | 34 | - id: pyright""" |
29 | 35 |
|
30 | 36 |
|
31 | | -def main(files: List[Path]) -> None: |
| 37 | +def main( |
| 38 | + dataset_name: str, dataset_split: str, repo_or_repo_dir: str, base_dir: str |
| 39 | +) -> None: |
| 40 | + dataset: Iterator[RepoInstance] = load_dataset(dataset_name, split=dataset_split) # type: ignore |
| 41 | + example = None |
| 42 | + repo_name = None |
| 43 | + for example in dataset: |
| 44 | + repo_name = example["repo"].split("/")[-1] |
| 45 | + if repo_or_repo_dir.endswith("/"): |
| 46 | + repo_or_repo_dir = repo_or_repo_dir[:-1] |
| 47 | + if repo_name in os.path.basename(repo_or_repo_dir): |
| 48 | + break |
| 49 | + assert example is not None, "No example available" |
| 50 | + assert repo_name is not None, "No repo available" |
| 51 | + |
| 52 | + repo_dir = os.path.join(base_dir, repo_name) |
| 53 | + if os.path.isdir(repo_or_repo_dir): |
| 54 | + repo = repo_or_repo_dir |
| 55 | + elif os.path.isdir(repo_dir): |
| 56 | + repo = repo_dir |
| 57 | + else: |
| 58 | + raise Exception( |
| 59 | + f"Neither {repo_dir} nor {repo_or_repo_dir} is a valid path.\nUsage: commit0 lint {{repo_or_repo_dir}}" |
| 60 | + ) |
| 61 | + |
| 62 | + files = [] |
| 63 | + repo = os.path.join(repo, example["src_dir"]) |
| 64 | + for root, dirs, fs in os.walk(repo): |
| 65 | + for file in fs: |
| 66 | + if file.endswith(".py"): |
| 67 | + files.append(os.path.join(root, file)) |
| 68 | + |
32 | 69 | config_file = Path(".commit0.pre-commit-config.yaml") |
33 | 70 | if not config_file.is_file(): |
34 | 71 | config_file.write_text(config) |
|
0 commit comments