| REDO(1) | General Commands Manual | REDO(1) |
نام (NAME)
redo - بازسازی فایلهای هدف هنگام تغییر فایلهای منبع
خلاصه دستور (SYNOPSIS)
redo [option] [target]...
توضیحات (DESCRIPTION)
دستور redo ابزاری است برای ساخت فایلها و بازسازی آنها در صورتی که هر یک از وابستگیهایشان تغییر کرده باشد. قواعد ساخت درون فایلهایی با پسوند .do قرار دارند که dofile نامیده میشوند. معمولاً dofileها اسکریپتهای شلی هستند که توسط sh(1) اجرا میشوند.
دستور redo از یک الگوریتم ساده برای یافتن dofileها استفاده میکند: نخست به دنبال نام فایل هدف با پسوند .do میگردد، سپس به دنبال نامفایلهایی متشکل از default بهعلاوهٔ پسوند نام فایل هدف بهعلاوهٔ .do میگردد و بهصورت بازگشتی آخرین جزء از پسوند نام فایل هدف را حذف میکند.
برای نمونه، اگر از redo خواسته شود فایلی به نام example.x.y.z را بسازد، برای ساخت این فایل به دنبال dofileهایی با نامهای زیر خواهد گشت:
example.x.y.z.do
default.x.y.z.do
default.y.z.do
default.z.do
default.do
دستور redo نخستین فایل موجودِ یافتشده از این طریق را به عنوان dofile هدف در نظر گرفته و آن را اجرا میکند. اگر به redo هدفی داده نشود، هدفی به نام all را میسازد. اگر redo نتواند dofileای برای یک هدف پیدا کند، با یک کد وضعیت که نشاندهندهٔ شکست است خارج میشود.
دستور redo سه آرگومان را به dofile در حال اجرا ارسال میکند:
- $1
- نام هدف است.
- $2
- نام پایه (basename) هدف است؛ یعنی نام هدف منهای اجزای دایرکتوری آغازین و پسوندها. توجه داشته باشید که پسوند بر اساس dofile مشخص میشود: فایلی مانند example.a.b.c که با یک dofile به نام default.b.c.do ساخته میشود، پسوند آن b.c در نظر گرفته خواهد شد، بنابراین $2 روی example.a تنظیم میشود.
- $3
- نام یک فایل موقت است که پس از خروج موفقیتآمیز dofile، بهصورت اتمیک جایگزین هدف میشود. dofile بهجای نوشتن در $3، میتواند در خروجی استاندارد نیز بنویسد.
اگر هدف جاری در صورت تغییر سایر فایلها باید بازسازی شود، میتوان این موضوع را با redo-ifchange(1) اعلام کرد: هنگامی که redo-ifchange(1) از داخل یک dofile اجرا میشود، redo هدفهای دادهشده به redo-ifchange(1) را میسازد و در فراخوانی بعدی redo، اگر هر یک از هدفهای دادهشده به redo-ifchange(1) از زمان آخرین ساخت تغییر کرده باشند، هدف جاری را بازسازی خواهد کرد.
اگر هدف جاری در صورت به وجود آمدن فایلی که در زمان ساخت وجود نداشته است باید بازسازی شود، این مورد را میتوان با redo-ifcreate(1) اعلام کرد: هنگامی که redo-ifcreate(1) از داخل یک dofile اجرا میشود، در صورتی که هر یک از هدفهای دادهشده به redo-ifcreate(1) وجود داشته باشند، redo در فراخوانی بعدی هدف جاری را بازسازی خواهد کرد.
اگر هدف جاری در صورت تغییر خروجی یک دستور باید بازسازی شود، میتوان این موضوع را با redo-stamp(1) اعلام کرد: هنگامی که redo-stamp(1) از درون یک dofile اجرا شود و دادههایی در ورودی استاندارد دریافت کند، در فراخوانی بعدی redo، اگر خروجی دستوری که دادهها را به آن لولهکشی (pipe) کرده است تغییر کند، redo هدف جاری را بازسازی خواهد کرد.
اگر هدف جاری همواره باید بازسازی شود، میتوان این موضوع را با redo-always(1) اعلام کرد: هنگامی که redo-always(1) از داخل یک dofile اجرا شود، redo در فراخوانی بعدی هدف جاری را بازسازی خواهد کرد.
گزینهها (OPTIONS)
اگر گزینهٔ -d یا --debug داده شود، redo اطلاعاتی را دربارهٔ تمام بررسیهای وابستگی چاپ میکند.
اگر گزینهٔ -h یا --help داده شود، redo توضیح کوتاهی دربارهٔ گزینههای خط فرمان خود چاپ میکند.
اگر گزینهٔ -j یا --jobs به همراه یک عدد صحیح داده شود، فراخوانی redo(1) یا redo-ifchange(1) با چند آرگومان، هدفها را بهصورت موازی میسازد. آرگومان عدد صحیح، بیشینهٔ تعداد هدفهای مجاز برای ساخت موازی را مشخص میکند. هدفها قفل میشوند، بنابراین اگر هدفهایی که بهصورت موازی ساخته میشوند وابستگی مشترکی داشته باشند، redo(1) آن وابستگی را تنها یک بار میسازد، مگر اینکه dofile وابستگی از redo-always(1) برای بازسازی در هر بار استفاده کند، یا وابستگی در طول فرایند ساخت به شیوهٔ دیگری قدیمی و نامعتبر شود.
اگر گزینهٔ --version داده شود، redo اطلاعات نسخه را چاپ کرده و خارج میشود.
اگر گزینهٔ -x یا --xtrace داده شود، redo دستورات درون dofileها را هنگام اجرا چاپ میکند.
مثالها (EXAMPLES)
- redo
- باعث میشود redo به دنبال dofileای به نام all.do بگردد، که آن را برای ساخت هدف all اجرا میکند. معمولاً اجرای all.do هیچ خروجیای در خروجی استاندارد تولید نمیکند و redo فایلی به نام all نمیسازد.
- redo example.x.y.z
- باعث میشود redo به دنبال dofileهایی به نامهای example.x.y.z.do، default.x.y.z.do، default.y.z.do، default.z.do، default.do بگردد. redo نخستین فایل موجود را برای ساخت example.x.y.z اجرا میکند.
تاریخچه (HISTORY)
دستور redo توسط D. J. Bernstein طراحی شد و چندین بار توسط Alan Grosskurth، Avery Pennarun، Jonathan de Boyne Pollard و Ælla Chiana Moskopp پیادهسازی شده است.
- Rebuilding target files when source files have changed ⟨URL: http://cr.yp.to/redo.html ⟩ نوشتهٔ D. J. Bernstein
- Purely top-down software rebuilding ⟨URL: http://grosskurth.ca/papers/mmath-thesis.pdf ⟩ نوشتهٔ Alan Grosskurth
- redo: a top-down software build system ⟨URL: https://github.com/apenwarr/redo#readme ⟩ نوشتهٔ Avery Pennarun
- Introduction to redo ⟨URL: http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/introduction-to-redo.html ⟩ نوشتهٔ Jonathan de Boyne Pollard
- Redo implementation in Bourne Shell ⟨URL: http://news.dieweltistgarnichtso.net/bin/redo-sh.html ⟩ نوشتهٔ Ælla Chiana Moskopp
نویسندگان (AUTHORS)
redo و این صفحهٔ راهنما توسط Ælla Chiana Moskopp نوشته شدهاند.
کپیرایت و تکثیر (COPYRIGHT)
حق نشر © 2014-2016 Ælla Chiana Moskopp. مجوز AGPLv3+: گنو آفرو جیپیال نسخه ۳ یا بالاتر http://www.gnu.org/licenses/agpl-3.0.html. این نرمافزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. تا حد مجاز طبق قانون، هیچ ضمانتی وجود ندارد.
همچنین ببینید (SEE ALSO)
redo-always(1), redo-ifchange(1), redo-ifcreate(1), redo-ood(1), redo-sources(1), redo-stamp(1), redo-targets(1)
گزارش باگها (BUGS)
این پیادهسازی از redo در صورتی که نام فایل هدف حاوی نویسهٔ تب (tab) یا خط جدید (newline) باشد، ممکن است با شکست مواجه شود.