2010-04-25 3 views
2

Я пытаюсь заставить свою сборку запускать только при создании тега в Mercurial. Путь им пытаются сделать это путем создания дополнительного Построить Config (Тэг Conf) для моего проекта, где я поставил VCS построить триггер:TeamCity - Сгенерируйте запуск по определенному файлу, Mercurial

+.:/Hgtags (Trigger только тогда, когда метки обновляются)

- :. (Не запускать на любых других файлов)

Всякий раз, когда я нажать на ревизию (без тегов) в обзоре моей сборки конф (Tag Conf) говорит «X Pending», я подозреваю, что это и есть наборы изменений. И когда я создаю тег в Mercurial, запускается сборка i, а X Pending уходит. Тогда все, что осталось для меня, - это обновить номера сборки/оборота в AssemblyInfo (каким-то образом) и развернуть артефакты (как-то).

Вопрос 1: Правильно ли это делается или есть другой/лучший способ сделать это? (Im использование sln2010 бегуна + NUnit + Mercurial)

Вопрос 2: Есть ли способ, чтобы получить имя тега из тега, так что он может быть использован для обозначения артефактов, например?

С уважением

ответ

2

Q1: Кажется прекрасным способом. Более ориентированным на Меркуриал способом было бы поместить крючок в раздел пользователя 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-идентификация этих командных строк, оставленных как упражнение для искаженного таким образом читателя. :)

+0

Привет им совершенно новый для hg, но элементы шаблона звучат интересно. Я буду копать сразу. Но вы можете узнать, есть ли шаблон для получения имени тега, например.получить «MyTagRC1» в теге hg «MyTagRC1»? –

+0

Вот что показывает {latesttag}, показанное выше. Он получает имя последнего тега. –

Смежные вопросы