| REDO-IFCHANGE(1) | General Commands Manual | REDO-IFCHANGE(1) |
نام (NAME)
redo-ifchange - بازسازی فایلهای هدف در صورت تغییر فایلهای منبع
خلاصه دستور (SYNOPSIS)
redo-ifchange target [target]...
توضیحات (DESCRIPTION)
ابزار redo(1) ابزاری برای ساخت فایلها و بازسازی آنها در صورت تغییر هر یک از وابستگیهایشان است. دستور redo-ifchange هنگامی که از درون یک dofile فراخوانی شود، وابستگیهای هدف فعلی redo(1) را به تمام فایلهایی که به عنوان آرگومان داده شدهاند اضافه میکند؛ آن فایلها را در صورت نیاز (باز)سازی میکند و اگر فایلهای ارائهشده به عنوان آرگومان از زمان آخرین ساخت تغییر کرده باشند، هدف فعلی را بازسازی میکند.
درون برنامه، redo-ifchange از stat(1) و md5sum(1) یا openssl(1) یا md5(1) برای تعیین قدیمی بودن یک فایل استفاده میکند. اگر ctime یک فایل از زمان آخرین ساخت تغییر نکرده باشد، redo-ifchange فایل را بهروز در نظر میگیرد. اگر چکسام (checksum) فایل تغییر نکرده باشد، redo-ifchange مقدار ذخیرهشدهی ctime را بهروزرسانی کرده و فایل را بهروز در نظر میگیرد. در غیر این صورت، redo-ifchange فایل را قدیمی و نیازمند بازسازی تلقی میکند.
هنگامی که redo(1) با گزینه -j یا --jobs و یک آرگومان عدد صحیح بزرگتر از ۱ فراخوانی شود، redo-ifchange(1) میتواند چندین هدف را به صورت موازی بسازد. این آرگومان عددی حداکثر تعداد اهدافی را مشخص میکند که redo-ifchange(1) مجاز است به صورت موازی بسازد.
فرایندهای redo-ifchange(1) که در نتیجهی فراخوانی یکسانی از redo(1) آغاز شدهاند، از مسیر یک فایل موقت «قناری» (canary) به طور مشترک آگاه هستند. اگر هر یک از فرایندهای redo-ifchange(1) با کد وضعیتی نشاندهندهی خطا خارج شود یا سیگنال SIGINT (وقفه از صفحهکلید) دریافت کند، فایلی در مسیر «قناری» ایجاد میکند. هنگامی که redo-ifchange(1) متوجه وجود چنین فایل «قناری» شود، در سریعترین زمان ممکن با کد وضعیتی نشاندهندهی خطا خارج میشود.
اگر یک قاعده ساخت غیر سطح بالا (non-top-level) چیزی در هدف ننویسد، redo-ifchange(1) هشدار خواهد داد. اتکا به «قواعد ساختی» که تماماً از اثرات جانبی تشکیل شدهاند معمولاً یک اشتباه است.
مثالها (EXAMPLES)
چهار فایل زیر را در نظر بگیرید: all.do، b.do، c و d:
فراخوانی redo(1) در پوشهای حاوی این فایلها، فایلی به نام b شامل یک برچسب زمانی (timestamp) خواهد ساخت. دفعه بعد که redo(1) فراخوانی شود، فایل b را تنها در صورتی بازسازی میکند که محتویات b، c یا d از زمان آخرین ساخت تغییر کرده باشد. این موضوع را میتوان با فراخوانی مکرر redo(1) و بررسی برچسب زمانی در b پس از هر فراخوانی، سپس تغییر دادن محتوای b، c یا d و فراخوانی مجدد redo(1) آزمود.
تاریخچه (HISTORY)
ابزار redo-ifchange توسط D. J. Bernstein طراحی و توسط Ælla Chiana Moskopp پیادهسازی شده است.
نویسندگان (AUTHORS)
ابزار redo-ifchange و این صفحه راهنما توسط Ælla Chiana Moskopp نوشته شدهاند.
کپیرایت و تکثیر (COPYRIGHT)
حق نشر © 2014-2016 برای Ælla Chiana Moskopp محفوظ است. مجوز AGPLv3+: گنو Affero GPL نسخه ۳ یا بالاتر http://www.gnu.org/licenses/agpl-3.0.html. این نرمافزار آزاد است: شما در تغییر و بازتوزیع آن آزاد هستید. تا حد مجاز قانون، هیچ ضمانتی وجود ندارد.
همچنین ببینید (SEE ALSO)
redo(1), redo-always(1), redo-dot(1), redo-ifcreate(1), redo-ood(1), redo-sources(1), redo-stamp(1), redo-targets(1), signal(7)
گزارش باگها (BUGS)
اگر نام فایلهای هدف حاوی نویسه تب (tab) یا خط جدید (newline) باشد، redo-ifchange به اشتباه آنها را همیشه قدیمی و نیازمند بازسازی در نظر میگیرد.
در رایانهای با پیادهسازیای از stat(1) که گزینه -c%Y را نمیپذیرد، redo-ifchange فایلهای هدف را همیشه قدیمی تلقی میکند.
هنگام ساخت موازی و ارسال سیگنال SIGINT (وقفه از صفحهکلید) به یک فرایند redo-ifchange(1)، سایر فرایندهای redo-ifchange(1) که از همان فراخوانی redo(1) آغاز شدهاند ممکن است بلافاصله متوجه وجود فایل «قناری» نشوند و برای مدت کوتاهی معطل بمانند.