# gradle-mirror `gradle-mirror` یک ابزار خط فرمان (CLI) با پایتون است که با ویرایش فایل سراسری Gradle (`init.gradle.kts`) آینه‌های مخزن (mirror repositories) را فعال یا غیرفعال می‌کند. ## قابلیت‌ها - فعال‌سازی آینه‌ها با درج یک بلاک مدیریت‌شده داخل `init.gradle.kts` - غیرفعال‌سازی با بازیابی فایل پشتیبان یا حذف بلاک بین markerها - رفتار idempotent (اجرای چندباره `active` باعث تکرار بلاک نمی‌شود) - خروجی رنگی در CLI - لاگ‌گیری از عملیات - سازگار با Linux، macOS و Windows ## ساختار پروژه ```text gradle_mirror/ __init__.py init.py cli.py mirror_manager.py gradle_locator.py constants.py utils.py main.py pyproject.toml README.md README.fa.md ``` ## پیش‌نیازها - Python 3.10 یا بالاتر - pip ## نصب ### روش 1 (پیشنهادی): نصب به‌صورت ابزار CLI در ریشه پروژه اجرا کنید: ```bash python -m pip install . ``` بعد از نصب: ```bash gradle-mirror --help ``` ### روش 2: اجرا بدون نصب ```bash python -m gradle_mirror.main --help ``` ## استفاده ### فعال‌سازی آینه‌ها ```bash gradle-mirror active ``` نمونه خروجی: ```text ✅ Gradle mirror activated 📁 Updated /Users/you/.gradle/init.gradle.kts ``` ### غیرفعال‌سازی آینه‌ها ```bash gradle-mirror deactive ``` ## نحوه کار ابزار - مسیر Gradle User Home به این ترتیب تشخیص داده می‌شود: 1. اگر متغیر محیطی `GRADLE_USER_HOME` تنظیم شده باشد، همان استفاده می‌شود. 2. در غیر این صورت، مسیر پیش‌فرض `~/.gradle` استفاده می‌شود. - فایل هدف: `/init.gradle.kts` - markerهای بلاک مدیریت‌شده: - `/* gradle-mirror-start */` - `/* gradle-mirror-end */` - فایل پشتیبان: `init.gradle.kts.bak` - فایل لاگ: `gradle-mirror.log` ## نکات مهم - فرمان `active` اگر markerها از قبل موجود باشند، محتوای بین آن‌ها را جایگزین می‌کند (بدون تکرار). - فرمان `deactive` ابتدا تلاش می‌کند از فایل پشتیبان بازیابی کند. - اگر بعد از حذف بلاک، فایل `init.gradle.kts` خالی شود، فایل حذف می‌شود. ## عیب‌یابی سریع - اگر خطای `No module named typer` گرفتید: ```bash python -m pip install . ``` یا: ```bash python -m pip install typer ``` - برای بررسی لاگ‌ها، فایل زیر را ببینید: ```text ~/.gradle/gradle-mirror.log ``` (اگر `GRADLE_USER_HOME` تنظیم شده باشد، لاگ داخل همان مسیر ساخته می‌شود.)