Q1: кажется, хорошо. Более Mercurial-ориентированным способом было бы поместить хук в раздел [hooks]
в Mercurial.ini пользователя TeamCity, который либо сообщает TeamCity о начале сборки, либо касается отдельного файла, который запускает сборку. Тем не менее, наблюдение за .hgtags тоже подойдет, если вы уверены, что hg update
выполняется (само по себе не обновляет локальную рабочую копию вне репозитория .hg
без hg update
или hg pull -u
).
Q2. Помните, что поскольку файл .hgtags
сам по себе является версионным, если вы выполните команду hg tag TAGNAME
, вы применили тег TAGNAME
к ревизии tip
, но при этом вы создали новый набор изменений, который теперь подсказка, поэтому ваша ревизия с тегом TAGNAME
больше не является подсказкой.
Когда вы нажимаете все эти наборы изменений, у вас есть то же соображение, на которое я ссылался в Q1 - на какую ревизию вы hg update
? Если вы hg update -r tip
(самое простое действие и значение по умолчанию) вы обновляете до одной ревизии после помеченной ревизии.
К счастью, есть некоторые элементы шаблона, которые очень полезны для обхода такой сложной ситуации: {latesttag}
и {latesttagdistance}
.
С их помощью вы можете обновить скрипт сборки до последней метки, выполнив что-то вроде:
LATESTTAG=$(hg log --template '{latesttag}')
hg update -r $LATESTTAG
, и это делает популярную строку версии для сборок, которые не были помечены:
VERSION=$(hg log --template '{latesttag}+{latesttagdistance}')
Windows-ification этих командных строк оставлен как упражнение для таким образом искалеченного читателя. :)