Как заставить ccnet обновлять несколько проектов независимо в одном репозитории mercurial?

#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 похоже, это неправильно обрабатывается. Попробовал ваше решение, и, кажется, работает нормально! Большое спасибо!