metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2016-08-16 04:35 pm

Тул или пару строчек на баше?

https://github.com/ahmetalpbalkan/govvv
Софтина на голанге, вызывающая go build с параметрами, устанавливающими переменные с версией, датой сборки, идентификатором ревизии гита и прочим таким.
Я бы в жизни не додумался искать такую софтину, сделал бы в скрипте вызов $(git rev-parse HEAD) и впихнул ее вывод в -ldflags, а вот однако ж - бывает. Хрен знает, насколько хорошо тащить все червей из всех закоулков гитхаба ради условного "взять готовое решение".

[identity profile] besm6.livejournal.com 2016-08-16 03:13 pm (UTC)(link)
Однако ж сходу: ВНЕЗАПНО может оказаться, что собирается отнюдь не HEAD... Начиная от "незакоммиченное состояние" и заканчивая результатом checkout конкретного коммита.

*sh, к сожалению, провоцирует на решение, которое таких тонкостей не учитывает. А года через два, когда этот двустрочник "был всегда" - опа! грабли.

Я это не к тому, что го не провоцирует на такие решения. Я его не видел, но судя по критике - может и провоцировать. Но *sh точно провоцирует. Этого опыта у меня более чем.

[personal profile] ex0_planet 2016-08-16 04:17 pm (UTC)(link)
git describe делает большую часть необходимой работы. А 80% кода этого "тула" предназначены для того чтобы изобразить из себя шелл.

> *sh, к сожалению, провоцирует на решение

Это не sh провоцирует, это горделивые программисты, которым западло решать неинтересные проблемы, поэтому они их решают "на отъебись". Это не космическая навигация, это блин, система сборки, все состояния кода там поддаются перечислению и осмыслению и неожиданностей там быть не может.

[identity profile] besm6.livejournal.com 2016-08-16 05:18 pm (UTC)(link)
*sh неудобен для аккуратного перебора всех вариантов. Потому и провоцирует на. Он хорош на своем месте - для малой автоматизации работы юзера и для работы под присмотром оного юзера. Чем меньше присмотра предполагается, тем больше аргументов в пользу чего-то другого.

Я действительно пробовал писать на шелле аккуратно. Очень быстро выясняется, что ой. Ну, чтоб не быть голословным - конструкцию вида try-finalize там сделать можно, но только в один уровень. Что, в общем, логично, ибо trap - это перехватчик не исключений, а сигналов, другая семантика. Но сразу приходится рисовать прорву вложенных if, в которых элементарно запутаться. Будет хуже, чем на го.

Это я не шибко сложные, но и не вполне тривиальные скрипты бэкапа писал. Кончилось тем, что они были переписаны на перле (perl был выбран потому, что мне бэкапить в основном дебианы, perl там по определению есть).

[identity profile] sbj-ss.livejournal.com 2016-08-16 05:38 pm (UTC)(link)
Пытаться перехватывать на шелле исключения - ой-вей, таки спасибо, пытался. set -e - ну его фтопку, поведение меняется от версии к версии, условия срабатывания trap неочевидны. Плюс попытки перехватить при этом stderr выливаются в фоновый слушатель и подобный секс в гамаке и стоя.
Тоже переписал на перле, да :)

[personal profile] ex0_planet 2016-08-17 03:43 pm (UTC)(link)
Дак не надо секс в гамаке, исключения там и все вот это вот. Задача обсуждаемого двухпятистрочника — всосать пяток переменных из контроля версий — чуть что не так и досвидос. Эксепшн один — exit 255.