| | import os |
| | import pandas as pd |
| | from pathlib import Path |
| |
|
| |
|
| | def rename_repos(csv_path: str, repos_dir: str): |
| | """Match and rename repos from various formats to owner___repo""" |
| | repos_dir = Path(repos_dir) |
| | df = pd.read_csv(csv_path) |
| |
|
| | |
| | lookup = {} |
| | for _, row in df.iterrows(): |
| | owner, repo = row["full_name"].split("/") |
| | new_name = f"{owner}___{repo}" |
| | |
| | lookup[repo] = new_name |
| | lookup[f"{owner}_{repo}"] = new_name |
| | lookup[f"{owner}__{repo}"] = new_name |
| | lookup[new_name] = new_name |
| |
|
| | |
| | existing = [d for d in repos_dir.iterdir() if d.is_dir() and not d.name.startswith(".")] |
| |
|
| | renamed, skipped = 0, 0 |
| | for d in existing: |
| | if d.name in lookup: |
| | new_name = lookup[d.name] |
| | if d.name != new_name: |
| | new_path = repos_dir / new_name |
| | if new_path.exists(): |
| | print(f"[SKIP] Target exists: {d.name} -> {new_name}") |
| | skipped += 1 |
| | else: |
| | d.rename(new_path) |
| | print(f"[OK] {d.name} -> {new_name}") |
| | renamed += 1 |
| | else: |
| | print(f"[WARN] Not in CSV: {d.name}") |
| | skipped += 1 |
| |
|
| | print(f"\nDone: {renamed} renamed, {skipped} skipped") |
| |
|
| |
|
| | if __name__ == "__main__": |
| | import argparse |
| |
|
| | parser = argparse.ArgumentParser() |
| | parser.add_argument("--csv", default="./workdir/repos_checked.csv") |
| | parser.add_argument("--repos", default="./workdir/repos_raw") |
| | args = parser.parse_args() |
| | rename_repos(args.csv, args.repos) |
| |
|