[О блоге] [наверх] [пред] [2020-12-14 22:05:05+03:00] [d0ffbdd295c1583abde17388553038f39747b0cc]
Темы: [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 тот же) для работы).

    [оставить комментарий]