REPO(1) راهنمای Repo REPO(1)

repo - اجرای یک دستور شل در هر پروژه با استفاده از repo forall

repo forall [<project>...] -c <command> [<arg>...]

خلاصه

اجرای یک دستور شل در هر یک از پروژه‌ها

repo forall -r str1 [str2] ... -c <command> [<arg>...]

نمایش این پیام راهنما و خروج
تعداد کارهای موازی برای اجرا (پیش‌فرض: بر اساس تعداد هسته‌های پردازنده)
اجرای دستور تنها روی پروژه‌های منطبق با عبارت باقاعده (regex) یا الگوهای wildcard
اجرای دستور تنها روی پروژه‌هایی که با عبارت باقاعده یا الگوهای wildcard تطابق ندارند
اجرای دستور تنها روی پروژه‌های منطبق با گروه‌های مشخص‌شده
دستور (و آرگومان‌های) مورد نظر برای اجرا
توقف عملیات در صورت ناموفق بودن خروج یک دستور
صرف‌نظر کردن بی‌سروصدا و خروج بدون کد غیرصفر به دلیل دریافت نشدن پروژه‌ها (missing checkouts)
اجبار به حالت تعاملی

نمایش تمامی خروجی‌ها
فقط نمایش خطاها
نمایش سرآیندهای پروژه پیش از خروجی

شروع عملیات از بیرونی‌ترین مانیفست
عدم اعمال عملیات روی مانیفست‌های بیرونی
اجرای عملیات تنها روی این (زیر)مانیفست
اجرای عملیات روی این مانیفست و زیرمانیفست‌های آن

برای مشاهده راهنمای تفصیلی، دستور `repo help forall` را اجرا کنید.

دستور شل یکسانی را در هر پروژه اجرا می‌کند.

گزینه -r امکان اجرای دستور را تنها روی پروژه‌های منطبق با عبارت باقاعده (regex) یا الگوی wildcard فراهم می‌کند.

به‌طور پیش‌فرض، پروژه‌ها به‌صورت غیرتعاملی و موازی پردازش می‌شوند. اگر قصد اجرای دستورهای تعاملی را دارید، حتماً گزینه --interactive را ارسال کنید تا مقدار --jobs 1 اجبار شود. با وجود اینکه ترتیب پردازش پروژه‌ها تضمین‌شده نیست، اما ترتیب خروجی پروژه‌ها پایدار است.

قالب‌بندی خروجی

گزینه -p باعث می‌شود 'repo forall' لوله‌ها را به جریان‌های stdin، stdout و stderr دستور متصل کرده و تمام خروجی را به یک جریان پیوسته هدایت کند که در یک نشست پیجر (pager) واحد نمایش داده می‌شود. سرآیندهای پروژه پیش از نمایش خروجی هر دستور درج می‌شوند. اگر دستوری در یک پروژه هیچ خروجی تولید نکند، هیچ سرآیندی نمایش داده نخواهد شد.

شیوه قالب‌بندی ارائه‌شده توسط -p برای انواع خاصی از جستجوها بسیار مناسب است؛ برای نمونه دستور `repo forall -p -c git log -SFoo` تمام کامیت‌هایی را که ارجاعاتی به Foo اضافه یا حذف می‌کنند، چاپ خواهد کرد.

گزینه -v باعث می‌شود در صورتی که دستوری تنها روی stderr خروجی تولید کند، 'repo forall' پیام‌های stderr را نمایش دهد. در حالت عادی، گزینه -p مانع از نمایش خروجی دستور می‌شود مگر اینکه دستور حداقل یک بایت خروجی روی stdout تولید کند.

محیط (ENVIRONMENT)

دستور pwd بیانگر دایرکتوری کاری پروژه است. اگر کلاینت فعلی یک کلاینت آینه‌ای (mirror) باشد، pwd مخزن Git خواهد بود.

متغیر REPO_PROJECT بر روی نام یکتای پروژه تنظیم می‌شود.

متغیر REPO_PATH مسیر نسبی نسبت به ریشه کلاینت است.

متغیر REPO_OUTERPATH مسیر ریشه زیرمانیفست نسبت به ریشه کلاینت است.

متغیر REPO_INNERPATH مسیر نسبی نسبت به ریشه زیرمانیفست است.

متغیر REPO_REMOTE نام سیستم ریموت (remote) برگرفته از مانیفست است.

متغیر REPO_LREV نام بازنگری (revision) از مانیفست است که به یک شاخه ردیابی محلی ترجمه شده است. اگر نیاز به ارسال بازنگری مانیفست به یک دستور git محلی دارید، از REPO_LREV استفاده کنید.

متغیر REPO_RREV نام بازنگری دقیقاً همان‌گونه که در مانیفست نوشته شده است می‌باشد.

متغیر REPO_COUNT تعداد کل پروژه‌هایی است که پیمایش می‌شوند.

متغیر REPO_I شمارنده پیمایش فعلی (مبتنی بر ۱) است. این متغیر می‌تواند به همراه REPO_COUNT برای افزودن یک نشانگر پیشرفت ساده به دستور شما به کار رود.

متغیرهای REPO__* متغیرهای محیطی اضافی هستند که توسط عنصر "annotation" در زیر هر عنصر پروژه تعیین شده‌اند. این ویژگی می‌تواند برای تمایز درخت‌ها بر اساس معیارهای خاص کاربر یا به‌سادگی جهت یادداشت‌گذاری جزئیات درخت مفید باشد.

آرگومان‌های موضعی شل ($1، $2، ..، $#) بر روی هرگونه آرگومانی که پس از <command> بیاید تنظیم می‌شوند.

مثال: برای فهرست کردن پروژه‌ها:

repo forall -c 'echo $REPO_PROJECT'

توجه داشته باشید که $REPO_PROJECT داخل نقل‌قول قرار گرفته است تا اطمینان حاصل شود که به جای بسط یافتن در شل فراخوان، در بستر اجرای <command> بسط داده می‌شود.

مگر در صورت استفاده از -p، ورودی و خروجی‌های stdin، stdout و stderr از ترمینال به ارث برده شده و بازهدایت نمی‌شوند.

در صورت استفاده از -e، اگر خروج یک دستور ناموفق باشد، 'repo forall' بدون پیمایش پروژه‌های باقی‌مانده متوقف خواهد شد.

ژوئیه ۲۰۲۲ repo forall