Что: d0ffbdd295c1583abde17388553038f39747b0cc
Когда: 2020-12-14 22:05:05+03:00
Темы: redo
goredo 0.5.0 Вот и первый релиз goredo в котором уже настоящие баги поправлены. Из проекта http://news.dieweltistgarnichtso.net/bin/redo-sh.html я взял тесты, сделал обёртку над ними для запуска через github.com/chriscool/sharness. Обнаружил неприятные баги. Все они данные бы не попортили, не обманывали бы тем что собрали что должны -- ничего страшного. Но в некоторых случаях просто падали бы с ошибками о не найденных .do например. Вот только автор этого redo-sh считает что redo-always буквально всегда превсегда должен пересобирать цель. Мол например TeX может неопределённое количество раз пересобирать документ, пока не будут разрешены все ссылки и номера ссылок/страниц. Люто несогласен с его позицией. Собственно, как и apenwarr/redo реализация. Это по сути делает always цели совершенно неюзабельными/бесполезными. Например у меня все .c файлы зависят от .h, в котором проставляется версия кода, которая, в свою очередь, берётся из выхлопа git-describe. Да, из-за checksum (или redo-stamp) зависимые цели пересобираться не будут, но сам git-describe то вызовется же. А он очень не лёгкий. В итоге простенький Си проектик всегда будет собираться уйму времени из-за кучи git вызовов. И я даже не представляю как в redo-sh можно хотя бы костылями сделать желаемое поведение (при сборке "проверять" версию, но делать только один раз). И с ходу я даже не понимаю как он использует redo-always для сборок TeX-а... ведь в redo нет таких вещей как повтори сборку или пойми выполнена ли она. С TeX-ом проблем вообще нет никаких и я прям недавно как-раз делал .do цели для сборки LaTeX документа где те самые несколько итераций пересборки нужны. apenwarr/redo предлагает просто обернуть содержимое .do в while. Логично, разумно. И я так же сделал: redo-ifchange report.tex exec >&2 pdflatex report.tex while grep -q "Rerun to get" report.log ; do pdflatex report.tex done mv report.pdf $3 Возможно не супер элегантно, но и не сказать что шибко страшно, зато никаких проблем с always целью. В любом случае я убеждён что сборка LaTeX документа это одна атомарная цель, с точки зрения системы сборки. А то что LaTeX-у действительно бывает нужно буквально говорить "собирайся, пока ..." (условия о bibtex-ах, номерах страниц, ссылках и прочем). В общем, как всегда always цели плодят много проблем и недоговорённостей. Лучше держаться от них подальше. Но в apenwarr/redo (+redo-stamp) с ними жить получается, как и в goredo, само собой. Да и redo-c благодаря checksum-ам. Но redo-sh в моих проектах был бы неюзабелен (хотя он и так не юзабелен и не работает у меня, ибо требует именно GNU утилиты (stat тот же) для работы).
Сгенерирован: SGBlog 0.34.0