28 октября 2013 г.

Кровавый enterprise

В очередной раз сталкиваюсь со всей кровавостью enterprise решений. Есть такая штука как teamcity, отличная вещь кстати говоря, но внутри использует jgit для выдёргивания исходников из репозитория. Есть репозиторий, который внутри содержит симлинки, так надо. Как оказалось, jgit не умеет правильно обрабатывать симлинки и вместо них создаёт обычные файлы в которых указано назначение симлинка... Про это товарищи писавшие teamcity знают и описали работающий воркэраунд.

А я-то думал, что за хрень происходит.

22 октября 2013 г.

Очередной пример того, почему я не люблю make

В нагрузку к предыдущему псто можно сказать одно - make 3.81 и 3.82 - в некотором поведении между собой несовместимы.

В предыдущем псто был пример с ifndef  VAR и в нём делалось объявление этой самой VAR. Засада вылезла с той стороны с которой я её ну аще никак не ждал. Оказалось, что у make 3.81 и 3.82 по разному обрабатываются переменные командной строки. 3.82 их подставляет как надо, а вот 3.81 почему-то сначала выполняет присваивание которое в коде, гадит ошибками, после чего присваивает переменным те значения, которые переданы в параметрах командной строки. шозанах, я так и не понял. Пришлось устраивать трэш и передавать параметры как переменные окружения, вызывая
VAR=value make -e <target>
Вот такие пироги с котятами. Я допускаю, что я упорот и строю костыли там где не надо. Если так, разупорите примером. про ?= знаю, не помогло. 

21 октября 2013 г.

Вот бывает что надо при сборке развесистого проекта брать информацию о id коммита, ветке и прочих радостях жизни.

Мы сделали так:
COMMIT=`git show --pretty=oneline|head -c 40`
BUILDN=`git log --pretty=format:'' | wc -l`
BRANCH=`git branch|grep '*'|awk '{print $2}'`

Так вот, так делать не надо. Потому что если захочется собирать проект чем-нибудь типа Teamcity, попадаешь на то, что все такие нормальные системы не выдёргивают полноценное дерево, а только последнюю ревизию, из-за чего всё вышенаписанное ломается.

Посему был приделан костыль такого вида:

ifndef COMMIT
COMMIT=`git show --pretty=oneline|head -c 40`
endif
ifndef BUILDN
BUILDN=`git log --pretty=format:'' | wc -l`
endif
ifndef BRANCH
BRANCH=`git branch|grep '*'|awk '{print $2}'`
endif

Теперь если эти параметры передаются в makefile из системы сборки(а она их знает), то обращений к гиту(которые по понятным причинам обламываются) не будет.

Знал бы где где костыль сломается, инвалидное кресло бы припас.