#mercurial #cruisecontrol.net
#mercurial #cruisecontrol.net
Вопрос:
У меня есть центральный репозиторий hg с несколькими подпроектами в нем. Примерно так:
/Hg_central
/subproject-a
/subproject-b
/...
Я пытаюсь настроить cc.net сервер, чтобы он создавал подпроект, ТОЛЬКО если его каталог был обновлен.
Моя текущая проблема заключается в том, что после обновления и сборки одного из подпроектов сервер не обнаружит никаких изменений для других подпроектов, поскольку mercurial обновил весь репозиторий. CC.NET не будет создавать другие подпроекты, если не было выполнено другое обновление. Я безуспешно пытался использовать inclusionFilters. Я также не могу позволить себе иметь отдельный WorkingDirectory для каждого подпроекта. Чего мне не хватает, чтобы это стало возможным?
Мой конфигурационный файл ccnet в настоящее время выглядит следующим образом:
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="subproject-a">
<workingDirectory>G:Hg-clone</workingDirectory>
<triggers>
<intervalTrigger name="continuous" seconds="60" buildCondition="IfModificationExists" initialSeconds="20" />
</triggers>
<sourcecontrol type="filtered">
<inclusionFilters>
<pathFilter>
<pattern>/subproject-a/**/*</pattern>
</pathFilter>
</inclusionFilters>
<sourceControlProvider type="hg" autoGetSource="true" >
<repo>http://myserver/myproject</repo>
<multipleHeadsFail>false</multipleHeadsFail>
</sourceControlProvider>
</sourcecontrol>
<tasks>
<exec>
<executable>mybuild.bat</executable>
</exec>
</tasks>
</project>
<project name="subproject-b">
<workingDirectory>G:Hg-clone</workingDirectory>
<triggers>
<intervalTrigger name="continuous" seconds="60" buildCondition="IfModificationExists" initialSeconds="20" />
</triggers>
<sourcecontrol type="filtered">
<inclusionFilters>
<pathFilter>
<pattern>/subproject-b/**/*</pattern>
</pathFilter>
</inclusionFilters>
<sourceControlProvider type="hg" autoGetSource="true" >
<repo>http://myserver/myproject</repo>
<multipleHeadsFail>false</multipleHeadsFail>
</sourceControlProvider>
</sourcecontrol>
<tasks>
<exec>
<executable>mybuild.bat</executable>
</exec>
</tasks>
</project>
</cruisecontrol>
Ответ №1:
С svn это работает как шарм, поэтому я немного удивлен, что mercurial нет.
В любом случае, возможным обходным путем является определение одного проекта, целью которого является обновление исходного кода, а все остальные проекты должны иметь проектный триггер для этого проекта.
HTH
Комментарии:
1. Проблема с mercurial в том, что вы не можете обновить только подпапку, вам нужно обновить все репозиторий сразу, поэтому CC.NET похоже, это неправильно обрабатывается. Попробовал ваше решение, и, кажется, работает нормально! Большое спасибо!